【考研数据结构——C语言描述】第二章 线性表链式存储结构上的基本操作——双向链表

25计算机考研,数据结构知识点整理(内容借鉴了王道408+数据结构教材),还会不断完善所整理的内容,后续的内容也会不断更新(可以关注),若有错误和不足欢迎各位朋友指出!

目录

1.双向链表的结构定义

2.双向链表的插入操作

3.双向链表的删除操作


循环单链表虽然能实现从任一结点出发沿着链找到其前驱结点,但时间耗费是O(n)。如果希望从表中快速确定一个结点的前驱,就是在单链表的每个结点中再增加其前驱的指针域prior(结点有两个指针域)。这样形成的链表中就有两条方向不同的链,称为双(向)链表(double linked list)。双向链表的结点结构如图2.14所示。

1.双向链表的结构定义

cpp 复制代码
typedet struct DNode
 { ElemType data ;
   struct DNode * prior, * next;
 } DNode,* DoubleList;

单链表类似,双向链表也可增加头结点使其运算变得方便。同时双链表也可以有循环表 ,称为**双向循环链表,**其结构如图2.15所示

双向循环链表:让头结点的前驱指针指向链表的最后一个结点 ,让最后一个结点的后继指针指向头结点

由于在双向链表中既有前向链又有后向链,寻找任一个结点的直接前驱结点与直接后继结点都变得非常方便了。设指针p指向双向链表中某一结点,则有下式成立:

(双向链表结构的对称性)

cpp 复制代码
p->prior->next==p
p==p->next->prior

在双向链表中,那些只涉及后继指针的算法,如求表长度、取元素、元素定位等,与单链表中相应的算法相同,只是涉及前驱和后继两个指针变化的操作不同。

2.双向链表的插入操作

**算法思想:**要在双向链表第i个结点之前插人一个新的结点,则指针的变化情况如图 2.16 所示。

cpp 复制代码
int DlinkIns(DoubleList L,int i, ElemType e)
{
  DNode *s,*p;
  ... /*先检查待插入的位置i是否合法(实现方法同单链表的前插操作)*/
  .../*若位置i合法,则找到第i个结点并让指针p指向它*/
  s=( DNode*)malloc(sizeof( DNode));
  if(s)
  { s->data=e;
    s->prior=p->prior; ①
    p->prior->next=s; ②
    s->next=p; ③
    p->prior=s; ④
    return TRUE;
  }
  else return FALSE:
}

3.双向链表的删除操作

**算法思想:**要在双向链表第i个结点之前插入一个新的结点,则指针的变化情况如图 2.16 所示。

cpp 复制代码
int DlinkDel( DoubleList L,int i,ElemType *e)
{  
   DNode *p;
   .../*先检查待插入的位置i是否合法(实现方法同单链表的删除操作)*/ 

   .../*若位置i合法,则找到第i个结点并让指针p指向它*/

   *e=p->data;
    p->prior->next=p->next; ①
    p->next->prior=p->prior; ②
    free(p);
    return TRUE;
}
相关推荐
superman超哥4 小时前
仓颉语言中元组的使用:深度剖析与工程实践
c语言·开发语言·c++·python·仓颉
LYFlied5 小时前
【每日算法】LeetCode 153. 寻找旋转排序数组中的最小值
数据结构·算法·leetcode·面试·职场和发展
元亓亓亓5 小时前
考研408--计算机网络--day10--传输层&UDP&TCP
tcp/ip·计算机网络·考研·udp·408
charlie1145141916 小时前
现代嵌入式C++教程:C++98——从C向C++的演化(2)
c语言·开发语言·c++·学习·嵌入式·教程·现代c++
雨季余静6 小时前
c语言 gb2312转utf-8,带码表,直接使用。
c语言·c语言utf8·c语言gb2312·c语言gbk·c语言gb18030·gb2312转utf8·gbk转utf8
2401_890443027 小时前
Linux 基础IO
linux·c语言
jianfeng_zhu8 小时前
整数数组匹配
数据结构·c++·算法
yueqingll8 小时前
032、数据结构之代码时间复杂度和空间复杂度的判断:从入门到实战
数据结构
egoist202310 小时前
【Linux仓库】超越命令行用户:手写C语言Shell解释器,解密Bash背后的进程创建(附源码)
linux·c语言·bash·xshell·环境变量·命令行参数·内建命令
罗湖老棍子11 小时前
最小函数值(minval)(信息学奥赛一本通- P1370)
数据结构·c++·算法··优先队列·