本文已参与「新人创作礼」活动,一起开启掘金创作之路。
**双链式存储结构:**存放元素的同时,存放其后继和前驱元素的信息
存放信息:
**循环单链式存储结构:**将最后一个元素的后继指向第一个元素的存储地址。
**循环双链式存储结构:**将最后一个元素的后继指向第一个元素的存储地址,将第一个元素的前驱指向最后一个元素的存储地址。
2.3.3 线性表的基本运算在链式表上的实现
(1)单链表的插入运算 将给定值为 x 的元素插入到链表 head 的第 i 个结点之前。 步骤: (1) 先找到链表的第 i-1 个结点 q。 (2) 生成一个值为 x 的新结点 p, p 的指针域指向 q 的直接后继结点 (3) q 的指针域指向 P
注意: 链接操作 p->next=q->next 和 q->next=p 两条语句的执行顺序不能颠倒, 否则结点*q 的链域值 (即指向原表第 i 个结点的指针) 将丢失。
(2)单链表的删除运算
将链表中第 i 个结点从链表中移出, 并修改相关结点的指针域。
将 ai 结点移出后,需要修改该结点的直接前驱结点的指针域, 使其指向移出结点 ai 的直接后继结点。
注意: free(p)是必不可少的(表示释放空间), 因为当一个结点从链表移出后, 如果不释放它的空间, 它将变成一个无用的结点, 它会一直占用着系统内存空间, 其他程序将无法使用这块空间。
(3)单链表的归并(指将两个有序的线性表,合并为一个有序的线性表) 注意:当两个线性表非空时,不另外新开辟空间,只需将原来两个链表中的结点之间的关系解除,重新按元素值将所有结点连接成一个链表。
2.3.4 单链表与双链式的特点
- 具有单链表的特点
- 前驱操作简单O(1)
- 任何位置插入、删除都简单了(已知该位置指针)