服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++带头双向循环链表超详细解析

C++带头双向循环链表超详细解析

2022-10-27 13:49程序猿教你打篮球 C/C++

带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单

上期我们讲完了无头单向非循环链表,这期我们接着来讲链表中结构最复杂的带头双向循环链表!

本期主要内容:

什么是带头双向循环链表?

带头双向循环链表常用接口实现!

顺序表和链表的区别和联系!

什么是带头双向循环链表

什么是带头?双向?循环?(带头双向循环链表)

带头:代表链表存在一个哨兵位节点,也就是头节点,这个节点不存放任何的有效数据!

双向:每个节点都有两个指针,分别指向它的前一个节点和后一个节点!

循环:最后一个节点next不再指向NULL指向的是哨兵位节点,哨兵位节点prev指向的是最后一个节点!(如果是单项链表的话哨兵位不指向最后一个节点!)

C++带头双向循环链表超详细解析

带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了,后面我们代码实现了就知道了!

 

带头双向循环链表常用接口实现

搭建带头双向循环链表的结构!

C++带头双向循环链表超详细解析

带头双向循环链表的初始化并创建新节点!

C++带头双向循环链表超详细解析

头部插入节点!

C++带头双向循环链表超详细解析

尾部插入节点!

C++带头双向循环链表超详细解析

头部删除节点!

C++带头双向循环链表超详细解析

尾部删除节点!

C++带头双向循环链表超详细解析

在pos节点前插入节点!

我们首先要找到pos节点的地址!

ListNode* ListFind(ListNode* phead, LTDataType x)
{
	assert(phead);
	ListNode* cur = phead->next;
	while (cur != phead)
	{
		if (cur->data == x)
		{
			return cur;
		}
		cur = cur->next;
	}
	return NULL;
}

C++带头双向循环链表超详细解析

删除指定pos节点!

看了上面的那么多的图解,相信删除指定节点对你来说也很简单吧!我就直接上代码了!

void ListErase(ListNode* pos)
{
	assert(pos);
	ListNode* prev = pos->prev;
	ListNode* next = pos->next;
	prev->next = next;
	next->prev = prev;
	
	free(pos);
	pos = NULL;
}

最后别忘记销毁链表哦!

void ListDestory(ListNode* phead)
{
	ListNode* cur = phead->next;
	while (cur != phead)
	{
		ListNode* next = cur->next;
		free(cur);
		cur = next;
	}
	free(phead);
	phead = NULL;
}

其实很多小伙伴一看到数据结构就头疼,但是我想说,不要嫌画图麻烦,一定要多画图,这样更有利于我们实现代码,靠脑袋空想是想不出来的!

最后爱打篮球的程序猿想送小伙伴们一句话:天再高又怎样,踮起脚尖就更接近阳光!

gitee(码云):Mercury. (zzwlwp) - Gitee.com

到此这篇关于C++带头双向循环链表超详细解析的文章就介绍到这了,更多相关C++ 带头双向循环链表内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_61784621/article/details/123401805

延伸 · 阅读

精彩推荐
  • C/C++C语言解决螺旋矩阵算法问题的代码示例

    C语言解决螺旋矩阵算法问题的代码示例

    这篇文章主要介绍了C语言解决螺旋矩阵算法问题的代码示例,螺旋矩阵中的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环...需要...

    hzy37745552021-03-31
  • C/C++C语言实现简单计算器功能(2)

    C语言实现简单计算器功能(2)

    这篇文章主要为大家详细介绍了C语言实现简单计算器功能的第二部分,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一...

    xiaocaidayong9122021-08-20
  • C/C++如何正确认识C语言在当今编程领域的地位

    如何正确认识C语言在当今编程领域的地位

    已经不止是一个人讲到C语言在如今变幻莫测的编程领域过时了,还在十几年前大学的老师说过一句非常经典的话,现在想起来倒也不觉得过时,学好C语言...

    C语言,C++,编程11302021-01-04
  • C/C++关于c语言的一个小bug详解

    关于c语言的一个小bug详解

    以下是对c语言中的一个小bug进行了详细的分析介绍。需要的朋友可以过来参考下...

    C语言教程网5062020-12-23
  • C/C++C语言代码链表实现贪吃蛇游戏

    C语言代码链表实现贪吃蛇游戏

    这篇文章主要为大家详细介绍了C语言链表实现贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    CodeMoggy11192021-10-20
  • C/C++带你了解C语言的数据的存储

    带你了解C语言的数据的存储

    这篇文章主要为大家详细介绍了C语言的数据的存储,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能给你带来帮助...

    sjp15111162021-12-16
  • C/C++如何用C语言生成简单格式的xml

    如何用C语言生成简单格式的xml

    本篇文章是对使用C语言生成简单格式的xml的实现代码进行了详细的分析介绍,需要的朋友参考下...

    C语言教程网3002020-12-10
  • C/C++C++ 中动态链接库--导入和导出的实例详解

    C++ 中动态链接库--导入和导出的实例详解

    这篇文章主要介绍了C++ 中动态链接库--导入和导出的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下...

    yipingg8862021-06-02