链表

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。
本文主要给大家介绍了关于C++实现双链表基本接口的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍吧。
首先先简单通过图示区分单链表和双链表的结构差异:
单链表的基本接口实现可参考:单链表简单实现
接下来就是双链表的基本接口实现:
#include <iostream>
#include <assert.h>
using namespace std;
typedef int DataType;
struct ListNode
{
ListNode* _next;
ListNode* _prev;
DataType _data;
ListNode(DataType x)
:_next(NULL)
, _prev(NULL)
, _data(x)
{}
};
typedef ListNode Node;
class List
{
public:
List()
:_head(NULL)
,_tail(NULL)
{}
List(const List& l)
:_head(NULL)
,_tail(NULL)
{
Copy(l);
}
void Copy(const List& l)
{
Node* cur = l._head;
while (cur)
{
PushBack(cur->_data);
cur = cur->_next;
}
}
List& operator=(const List& l)
{
Destory();
Copy(l);
return *this;
}
~List()
{
Destory();
}
void Destory()
{
if (_head)
{
Node* cur = _head;
while (_head)
{
cur = _head;
_head = _head->_next;
delete cur;
}
_head = _tail = NULL;
}
}
void PushBack(DataType x)
{
if (_head == NULL)
{
Node* tmp = new Node(x);
tmp->_next = tmp->_prev = NULL;
_head = _tail = tmp;
}
else
{
Node* tmp = new Node(x);
_tail->_next = tmp;
tmp->_prev = _tail;
_tail = tmp;
}
}
void PopBack()
{
if (_head == NULL)
{
return;
}
else if (_head->_next == NULL)
{
delete _head;
_head = _tail = NULL;
}
else
{
Node* tmp = _tail;
_tail = _tail->_prev;
_tail->_next = NULL;
delete tmp;
}
}
void PushFront(DataType x)
{
if (_head == NULL)
{
_head = _tail = new Node(x);
}
else
{
Node* tmp = new Node(x);
tmp->_next = _head;
_head->_prev = tmp;
_head = _head->_prev;
}
}
void PopFront()
{
if (_head == NULL)
{
return;
}
else if (_head->_next == NULL)
{
delete _head;
_head = _tail = NULL;
}
else
{
Node* tmp = _head;
_head = _head->_next;
delete tmp;
_head->_prev = NULL;
}
}
Node* Find(DataType x)
{
Node* cur = _head;
while (cur)
{
if (cur->_data == x)
return cur;
cur = cur->_next;
}
return NULL;
}
// 在pos的前面插入x
void Insert(Node* pos, DataType x)
{
assert(pos);
if ((pos == 0) || (pos->_prev == NULL))
{
PushFront(x);
}
else
{
Node* font = pos->_prev;
Node* tmp = new Node(x);
tmp->_prev = font;
tmp->_next = pos;
font->_next = tmp;
pos->_prev = tmp;
}
}
//删除pos位置的元素
void Erase(Node* pos)
{
assert(pos);
if ((pos == 0) || (pos->_prev == NULL))
{
PopFront();
}
else if (pos->_next == NULL)
{
PopBack();
}
else
{
Node* font = pos->_prev;
Node* last = pos->_next;
font->_next = last;
last->_prev = font;
delete pos;
}
}
//逆序整个双链表
void Reverse()
{
Node* cur = _head;
while (cur)
{
swap(cur->_next,cur->_prev);
cur = cur->_prev;
}
swap(_head, _tail);
}
void Print()
{
Node* cur = _head;
while (cur)
{
cout << cur->_data << "->";
cur = cur->_next;
}
cout << "NULL" << endl;
}
private:
Node* _head;
Node* _tail;
};
注:在一些操作实现时,一定要要考虑清楚各种情况,再进行情况的分类尽量提高代码的复用程度。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持
# c
# 链表接口
# 双向链表
# c语言双向链表
# C++ 双链表的基本操作(详解)
# C数据结构之双链表详细示例分析
# C/C++ 双链表之逆序的实例详解
# C语言双向链表的表示与实现实例详解
# C语言实现双向链表
# C语言之双向链表详解及实例代码
# C语言数据结构 双向链表的建立与基本操作
# C语言中双向链表和双向循环链表详解
# C语言 数据结构双向链表简单实例
# C语言实现数据结构和双向链表操作
# C语言实现的双链表功能完整示例
# 链表
# 是一种
# 相关内容
# 给大家
# 这篇文章
# 谢谢大家
# 多说
# 复用
# 线性表
# 有疑问
# namespace
# std
# assert
# iostream
# gt
# lt
# typedef
# ListNode
# struct
# DataType
相关文章:
西安专业网站制作公司有哪些,陕西省建行官方网站?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
如何通过服务器快速搭建网站?完整步骤解析
Swift中循环语句中的转移语句 break 和 continue
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
如何高效搭建专业期货交易平台网站?
建站之星导航如何优化提升用户体验?
网站制作的步骤包括,正确网址格式怎么写?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
如何在万网自助建站平台快速创建网站?
广州美橙建站如何快速搭建多端合一网站?
小建面朝正北,A点实际方位是否存在偏差?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
股票网站制作软件,网上股票怎么开户?
如何快速登录WAP自助建站平台?
外贸公司网站制作哪家好,maersk船公司官网?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
如何在自有机房高效搭建专业网站?
网站制作壁纸教程视频,电脑壁纸网站?
C#怎么创建控制台应用 C# Console App项目创建方法
建站中国官网:模板定制+SEO优化+建站流程一站式指南
建站主机选哪家性价比最高?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
香港服务器如何优化才能显著提升网站加载速度?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
建站ABC备案流程中有哪些关键注意事项?
高性价比服务器租赁——企业级配置与24小时运维服务
如何制作一个表白网站视频,关于勇敢表白的小标题?
建站之星如何一键生成手机站?
英语简历制作免费网站推荐,如何将简历翻译成英文?
如何彻底删除建站之星生成的Banner?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
建站之星2.7模板:企业网站建设与h5定制设计专题
独立制作一个网站多少钱,建立网站需要花多少钱?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
建站主机核心功能解析:服务器选择与网站搭建流程指南
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
宝塔建站后网页无法访问如何解决?
非常酷的网站设计制作软件,酷培ai教育官方网站?
javascript中的try catch异常捕获机制用法分析
如何在Ubuntu系统下快速搭建WordPress个人网站?
香港服务器租用费用高吗?如何避免常见误区?
建站10G流量真的够用吗?如何应对访问高峰?
如何通过主机屋免费建站教程十分钟搭建网站?
如何在建站主机中优化服务器配置?
如何自定义建站之星模板颜色并下载新样式?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
*请认真填写需求信息,我们会在24小时内与您取得联系。