数据结构与算法系列文章目录
本文内容摘自《王道数据结构》,经自我总结后做成笔记,供学习参考用。
本文部分图片摘自博文
文章目录
前言
单链表结点中只有一个指向其后继的指针,使得单链表只能从头结点依次顺序地向后遍历。要访问某个结点的前驱结点(插入、删除操作时),只能从头开始遍历,访问后继结点的时间复杂度为O(1),访问前驱结点的时间复杂度为O(n)。
为了克服单链表的上述缺点,引入双链表,双链表结点中有两个指针prior和next,分别指向其前驱结点和后继结点。
双链表中结点类型的描述:
struct DuLNode{ //定义双链表结点类型
ElemType data; //数据域
struct DuLNode *prior,*next; //前驱和后继指针
}DuLNode, *DuLinkList;
1、双链表的插入操作
在双链表中p所指的结点之后插入结点*s,其指针变化过程
- s->next=p->next; //将结点s插入到结点p之后
- p->next->prior=s;
- s->prior=p;
- p->next=s;
2.双链表的删除操作
删除双链表中结点p的后继结点q,其指针的变化过程:
删除操作的代码片段:
p->next=q->next; //图2.11中的步骤①
p->next->prior=p; //图2.11中的步骤②
free(q); //释放结点空间
3.静态链表
静态链表结构类型的描述:
4.顺序表和链表的比较
课后习题持续补充