详解双向链表的基本操作(C语言)

工科生一枚,热衷于底层技术开发,有强烈的好奇心,感兴趣内容包括单片机,嵌入式Linux,Uboot等,欢迎学习交流!
爱好跑步,打篮球,睡觉。
欢迎加我QQ1500836631(备注CSDN),一起学习交流问题,分享各种学习资料,电子书籍,学习视频等。

文章目录

    • 1.双向链表的定义
    • 2.双向链表的创建
    • 3.双向链表的插入
    • 4.双向链表的删除
    • 5.双向链表更改节点数据
    • 6.双向链表的查找
    • 7.双向链表的打印
    • 8.测试函数及结果

1.双向链表的定义

上一节学习了单向链表单链表详解。今天学习双链表。学习之前先对单向链表和双向链表做个回顾。
单向链表特点
??1.我们可以轻松的到达下一个节点, 但是回到前一个节点是很难的.
??2.只能从头遍历到尾或者从尾遍历到头(一般从头到尾)
双向链表特点
??1.每次在插入或删除某个节点时, 需要处理四个节点的引用, 而不是两个. 实现起来要困难一些
??2.相对于单向链表, 必然占用内存空间更大一些.
??3.既可以从头遍历到尾, 又可以从尾遍历到头
双向链表的定义:
??双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。下图为双向链表的结构图。

详解双向链表的基本操作(C语言)
双向循环链表的定义:
??双向链表也可以进行首尾连接,构成双向循环链表,如下图所示
在创建链表时,只需要在最后将收尾相连即可(创建链表代码中已经标出)。其他代码稍加改动即可。
详解双向链表的基本操作(C语言)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_16933601/article/details/105351119

2.添加至表的中间位置
??同单链表添加数据类似,双向链表中间位置添加数据需要经过以下 2 个步骤,如下图所示:
??新节点先与其直接后继节点建立双层逻辑关系;
??新节点的直接前驱节点与之建立双层逻辑关系;

详解双向链表的基本操作(C语言)

4.双向链表的删除

??双链表删除结点时,只需遍历链表找到要删除的结点,然后将该节点从表中摘除即可。
??例如,删除元素 2 的操作过程如图 所示:

详解双向链表的基本操作(C语言)
Node * DeleteList(Node * head,int data){    Node * temp=head;    /*遍历链表*/    while (temp)    {/*判断当前结点中数据域和data是否相等,若相等,摘除该结点*/if (temp->data==data) {    /*判断是否是头结点*/    if(temp->pre == NULL)    { head=temp->next; temp->next = NULL来源:嵌入式与Linux那些事
                                                        

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年3月5日
下一篇 2020年3月6日

相关推荐