双向链表的创建 ,删除,摧毁,最后打印输出◝(⑅•ᴗ•⑅)◜..°♡(超详细~)

目录

一.双向链表的定义与单链表的区别: 

 二.头指针的创建,双向链表的创建

1.头指针的创建:

2. 双向链表的创建:

 三.双向链表的删除:

 四.双向链表的摧毁:

五.双向链表的打印输出:

 ​编辑

最后,完整的代码奉上,还有运行截图:

 完整代码:


学习双向链表要有一些单链表的基础哦,如果还不会单链表的小伙伴可以看看我的这两篇博客~

单链表的创建,删除、增添节点,最后打印输出-CSDN博客

单链表之头插法与尾插法(最后栗子:单链表的反转)-CSDN博客

一.双向链表的定义与单链表的区别: 

首先,我们先来看看双向链表的定义:

双向链表(double linked list)是在单链表的每个节点中,在设置一个指向其前驱节点的指针域.

图解如下:

双向链表的创建 ,删除,摧毁,最后打印输出◝(⑅•ᴗ•⑅)◜..°♡(超详细~)_第1张图片

 与单链表的区别(这里我顺便为下面的创建进行声明):

双向链表的创建 ,删除,摧毁,最后打印输出◝(⑅•ᴗ•⑅)◜..°♡(超详细~)_第2张图片

相对于单链表,双向链表多了一个前驱指针域。在双向链表中的节点都有两个指针域,一个指向直接后继,另一个指向直接前继。 

双向链表的创建 ,删除,摧毁,最后打印输出◝(⑅•ᴗ•⑅)◜..°♡(超详细~)_第3张图片

 二.头指针的创建,双向链表的创建

1.头指针的创建:

双向链表的创建 ,删除,摧毁,最后打印输出◝(⑅•ᴗ•⑅)◜..°♡(超详细~)_第4张图片

这一步相对简单,就不做过多说明了,注意assert断言是可以省略的,用assert断言时,要引入头文件include 

2. 双向链表的创建:

双向链表的创建 ,删除,摧毁,最后打印输出◝(⑅•ᴗ•⑅)◜..°♡(超详细~)_第5张图片

注意,这里date是要创建节点的个数;在后面的main函数中有体现

双链表的头插法与尾插法与但链链表类似(根据下面的关键步骤画图理解下)

头插法关键步骤:1.addition->next=p->next;

                            2. p->next=addition;

                           3.addition->prior=p;

 注意两个指针都要有指向,p->next==NULL不要写成p->next=NULL;注意等号与赋值符号的区别

尾插法关键步骤:1.addition->prior=p;

                            2.addition->next=p->next;

                            3.p->next->prior=addition;

                           4.p->next->prior=addition;

 else外的p=p->next是让p持续指向下一个节点,方便节点的创建和打印,这里需要着重理解下

 双向链表的创建 ,删除,摧毁,最后打印输出◝(⑅•ᴗ•⑅)◜..°♡(超详细~)_第6张图片

 三.双向链表的删除:

双向链表的创建 ,删除,摧毁,最后打印输出◝(⑅•ᴗ•⑅)◜..°♡(超详细~)_第7张图片

主要就s->prior->next=s->nexts->next->prior=s->prior 理解下,相当于单链表的删除,也就是跳过当前要删除的链表。

双向链表的创建 ,删除,摧毁,最后打印输出◝(⑅•ᴗ•⑅)◜..°♡(超详细~)_第8张图片

 四.双向链表的摧毁:

双向链表的创建 ,删除,摧毁,最后打印输出◝(⑅•ᴗ•⑅)◜..°♡(超详细~)_第9张图片

这步注意要有一个temp变量来保存当前节点,头结点指向下一个节点,最后temp和head都要释放内存. 

双向链表的创建 ,删除,摧毁,最后打印输出◝(⑅•ᴗ•⑅)◜..°♡(超详细~)_第10张图片

五.双向链表的打印输出:
 双向链表的创建 ,删除,摧毁,最后打印输出◝(⑅•ᴗ•⑅)◜..°♡(超详细~)_第11张图片

这里为了更直观,我将前驱节点和后继 节点都打印了。其中打印前驱是注意是

p->prior->prior!=NULL;然后将最后一个前驱节点打印(不要遗落)。

双向链表的创建 ,删除,摧毁,最后打印输出◝(⑅•ᴗ•⑅)◜..°♡(超详细~)_第12张图片

最后,完整的代码奉上,还有运行截图:
 完整代码:

双向链表的创建 ,删除,摧毁,最后打印输出◝(⑅•ᴗ•⑅)◜..°♡(超详细~)_第13张图片

运行截图:

双向链表的创建 ,删除,摧毁,最后打印输出◝(⑅•ᴗ•⑅)◜..°♡(超详细~)_第14张图片

博客到这里也是结束了,喜欢的小伙伴可以点赞加关注支持下博主,这对我真的很重要~~ 

双向链表的创建 ,删除,摧毁,最后打印输出◝(⑅•ᴗ•⑅)◜..°♡(超详细~)_第15张图片

你可能感兴趣的:(链表,数据结构)