数据结构与算法之双向链表

一、双向链表

      1.双向链表的结点结构

typedef struct DualNode{
    ElemType data;
    struct DualNode *prior; // 前驱结点
    struct DualNode *next; // 后继结点
}DualNode, *DuLinkList;

      如图所示:

  

      2.双向循环链表

      既然存在单循环链表,那么双向链表也存在循环链表:

      3.双向链表的插入操作

      插入操作其实很简单,但是要注意顺序,不能写反,如图所示:

      通过上图,我们看看插入操作的实现步骤:

  • 1,s->next = p;
  • 2,s->prior = p->prior;
  • 3,p->prior->next = s;
  • 4,p->prior = s;

      注意:在交换的过程中不要出现矛盾,例如第4步如果先被执行了,那么p->prior就会提前变成s,使得插入操作出错

      4.双向链表的删除操作

      如图所示:

      通过上图,我们看看删除操作的实现步骤:

  • 1,p->prior->next = p->next;
  • 2,p->next ->prior = p->prior;
  • 3,free(p);

      总结一下:

  • 双向链表对于单循环链表来说,是要更复杂一点,每个结点多了一个prior指针(多耗点内存空间),对于插入和删除操作的顺序大家格外注意;
  • 但是,双向链表可以有效提高算法的时间性能,简单说就是用空间来换取时间。

 

本文为原创文章,如果对你有一点点的帮助,别忘了点赞哦!比心!如需转载,请注明出处,谢谢!

转载于:https://my.oschina.net/aibinxiao/blog/1835016

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值