目录
一、双向带头循环链表的格式
二、链表的初始化和销毁
2.1链表的初始化
2.2链表的销毁
三、链表的检查与准备
3.1链表的打印
3.2创建新结点
四、链表增删查改
4.1尾插
4.2尾删
4.3头插
4.4头删
4.5查找
4.6任意位置前插入
4.7删除任意位置
一、双向带头循环链表的格式
我们在这里要写的是双向带头循环链表(以下简称链表),可以说所有buff都叠满了,我们写起来肯定比单链表要得心应手多得多。
我们从图中可以就看到我们需要定义的结构体数据了:
二、链表的初始化和销毁
2.1链表的初始化
从定义的结构体我们就可以轻松想到我们的链表应当如何初始化,那就是让next和prev都指向它本身,此外,还要记住既然是链表,那么我们的结点都是动态开辟出来的。
2.2链表的销毁
链表的销毁当然也是一个结点一个结点free的,而且因为我们的pHead是哨兵位,我们设置的cur应该从pHead的下一个结点开始free,同时,通过对while条件的设置,保证pHead不被重复free
三、链表的检查与准备
3.1链表的打印
我们在测试时必须要能直观地观察我们的数据吧,这时一个打印链表函数就是必不可少的。
3.2创建新结点
为了我们插入方便,我们还要再写一个创建结点的函数。
四、链表增删查改
双向带头循环链表集满所有buff,代码简易,所以这里不再过多赘述,容易忽略的地方会特别提醒
4.1尾插
4.2尾删
我们的尾删是要不包括头结点的,所以我们要额外判断一下pHead的next
4.3头插
4.4头删
我们的头删也是要不包括头结点的,所以我们也要额外判断一下pHead的next
4.5查找
4.6任意位置前插入
4.7删除任意位置
五、代码
我的源代码:登录 - Gitee.comhttps://gitee.com/bright-and-sparkling-at-night/studying/commit/3d76ecd9b92e19d45d701fbfd83b5de275e64012