单链表&循环链表&双向链表的不同

该文中假设链表的头结点为plist

后继结点为->next

前驱结点为->prior

单链表:

①判空条件:plist==NULL 头节点等于NULL

②初始化:plist->next=NULL

循环链表:

①判空条件为:plist->next == plist; 头结点的下一个结点是头结点

②初始化:plist->next=plist;//头尾相连

②判断结尾不同:循环链表的结尾又回到了头(是一个圈圈一样的循环):p==plist;而单链表的结尾时NULL:p==NULL。

③循环链表可以从一个结点到达任意节点,而单链表只能顺着链表一直查找下去(因为循环链表可以一直循环下去,而单链表只能走一遍)。

双向链表:

增加了前驱结点,在涉及前驱结点的头插、尾插、删除操作上有所不同。

①判空条件plist==NULL.

①头插与尾插的最后一部插入时,需要把前驱结点连接上,头插法:p->prior=plist;p->next->prior=p;其中p->next可能为NULL,需要对其if判断操作。(如图所示)

②尾插法直接连接:p->prior = q;

③删除某节点操作中,不仅需要改变该结点前驱的后继指向(p->prior->next=p->next; ),也需要删除该节点后继的前驱指向(p->next->prior=p->prior;),该前驱仍然涉及p->next可能为NULL,因此增加if判断语句(如图所示)

具体执行代码请参照:

单链表:

【链表】单链表知识总结-内含代码操作及其说明_又秃又弱的博客-CSDN博客_单链表知识总结

循环链表:

【链表】循环链表知识点-内含代码基本操作及其说明_又秃又弱的博客-CSDN博客_循环链表的基本操作

双向链表:

双向链表知识点-内含基本操作及其说明_又秃又弱的博客-CSDN博客_双向链表前插操作核心代码可以交换先后位置吗?

在链表代码实现角度:

        单链表和循环链表的头插法是一样的,因为头插不需要考虑尾结点的情况,只需要在头部插入,而循环链表和单链表的不同就是尾结点指向头结点(形成循环),因此,头插法的实现都一样。

        尾插法也一样,单链表的尾巴=NULL,循环链表的尾巴=头节点plist。在尾插时,都是把新结点->next=尾->next,尾->next=新节点。

....所有实现代码中不同的就是循环条件

单链表for(Node*p=plist;p->next!=NULL;p=p->next);

循环链表:for(Node* p=plist;p->next!=plist;p=p->next);

而双向链表:只有涉及到前驱的头插、尾插、删除、函数需要修改,别的函数与单链表写法一致

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值