链表 :是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的;与顺序存储相比,链式存储结构方便实现数据的插入,删除等操作,但是不容易实现随机存取第 i 个数据元素的操作(需要从前往后遍历);So 对于经常是实现插入,删除操作的线性表,采用链式存储结构。
对链表的基本操作
- 初始化(空链)
- 返回链表长度
- 按序号取元素
- 按值查找元素(返回位置信息)
- 插入操作
- 删除操作
动态链表
单链表 LinkList
单循环链表 LinkListCy
单循环链表:最后一个结点的Next指向头结点,由链表尾可以很容易找到链表头,由头找尾较费时。因此通常设置尾指针 Tail
双向循环链表 DLinkList
前驱,后继,由头找尾 the same as 由尾找头,So 只要设置一个即可。
不带头结点的链表
不带头结点的链表看起来更自然一点,所有的结点都存数据,但是相对于带头结点的链表,不设置头结点的链表对 第 1 个 元素做插入、删除操作与其他结点不同,分开实现 !
· 不带头结点的单链表 LinkListNH
· 不带头结点的双向循环链表 DLinkListNH
相关问题
-
约瑟夫环问题
n个小孩围坐在一圈,由第 1 个小孩开始,依次报数。报到 m 的小孩出列,再从下一个小孩开始重新循环报数,直到所有的小孩出列,写出小孩出列的顺序。
[分析] 围成一圈,报数后删除,用不设头结点的循环链表实现,执行删除操作即可
静态链表
顺序存储结构也可以实现链式存储功能。
- 首先,开辟一个充分大的结构体数组(
静态分配存储空间
)。 - 结构体的一个成员(data)存放数据元素,另一个成员(link)存放链表中下一个数据元素在数字中的位置(下标)
通过记录下标而非指针的方式,在数组中实现链表的逻辑,这种方式称为静态链表。
静态链表存储于结构体数组中,但是链表的输出却不是按照数组的顺序输出,是一个指定的位置开始根据link的值依次输出的。
[注]
静态链表(结构体数组)第一个元素的 link值 对应的下标元素作为链表的头,以 link = -1 作为其结束的标志。
静态链表的插入、删除操作与动态链表相同,只需要修改指针,而不需要移动数据。总体来说,静态链表的使用没有单链表方便。
[应用]
静态链表在赫夫曼树与内部排序中都有应用;
【代码后补】
网友评论