一篇博客读懂双向链表

目录

一、双向带头循环链表的格式

二、链表的初始化和销毁

2.1链表的初始化

2.2链表的销毁 

三、链表的检查与准备 

3.1链表的打印

3.2创建新结点 

四、链表增删查改 

4.1尾插

4.2尾删

4.3头插

4.4头删 

4.5查找 

4.6任意位置前插入 

4.7删除任意位置 


一、双向带头循环链表的格式

我们在这里要写的是双向带头循环链表(以下简称链表),可以说所有buff都叠满了,我们写起来肯定比单链表要得心应手多得多。

我们从图中可以就看到我们需要定义的结构体数据了:一篇博客读懂双向链表_第1张图片

二、链表的初始化和销毁

2.1链表的初始化

从定义的结构体我们就可以轻松想到我们的链表应当如何初始化,那就是让next和prev都指向它本身,此外,还要记住既然是链表,那么我们的结点都是动态开辟出来的。

一篇博客读懂双向链表_第2张图片

2.2链表的销毁 

链表的销毁当然也是一个结点一个结点free的,而且因为我们的pHead是哨兵位,我们设置的cur应该从pHead的下一个结点开始free,同时,通过对while条件的设置,保证pHead不被重复free一篇博客读懂双向链表_第3张图片

三、链表的检查与准备 

3.1链表的打印

我们在测试时必须要能直观地观察我们的数据吧,这时一个打印链表函数就是必不可少的。 

一篇博客读懂双向链表_第4张图片一篇博客读懂双向链表_第5张图片

3.2创建新结点 

为了我们插入方便,我们还要再写一个创建结点的函数。

一篇博客读懂双向链表_第6张图片 

四、链表增删查改 

双向带头循环链表集满所有buff,代码简易,所以这里不再过多赘述,容易忽略的地方会特别提醒

4.1尾插

一篇博客读懂双向链表_第7张图片

4.2尾删

我们的尾删是要不包括头结点的,所以我们要额外判断一下pHead的next 

一篇博客读懂双向链表_第8张图片

4.3头插

一篇博客读懂双向链表_第9张图片 

4.4头删 

我们的头删也是要不包括头结点的,所以我们也要额外判断一下pHead的next 

一篇博客读懂双向链表_第10张图片 

4.5查找 

一篇博客读懂双向链表_第11张图片

4.6任意位置前插入 

 一篇博客读懂双向链表_第12张图片

4.7删除任意位置 

一篇博客读懂双向链表_第13张图片

五、代码 

​​​​​​​我的源代码:登录 - Gitee.comicon-default.png?t=N7T8https://gitee.com/bright-and-sparkling-at-night/studying/commit/3d76ecd9b92e19d45d701fbfd83b5de275e64012

 

 

 

 

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