四、静态链表
-
静态链表的节点存储在一段连续内存中,通过节点中称为游标的一个正整数来访问后继节点
typedef StaticNode { TYPE data; // 数据域 int index; // 游标 }StaticNode; int main() { StaticNode arr[100] = {}; arr[0].data = 1; arr[0].index = 5; arr[5].index = 3; arr[3].index = 8; arr[8].index = -1; }
-
在静态链表中进行插入、删除时,只需要修改游标的值即可不需要拷贝内存,也能达到链表的效果
-
但是也牺牲了随机访问节点的功能,而且链表的优点也有缺失。
-
是给没有指针的编程语言提供一种操作单链表的方式。
五、循环链表
-
循环链表的最后一个节点的next不再指向NULL,而是指向头节点。如果是单链表就称为单循环链表
-
好处是能够通过任意节点可以遍历整个链表
六、双向链表(双向循环链表)
-
所谓的双向链表就是链表节点中有两个指针域,一个指向前一个节点,叫做前趋指针(prev),另一个指向后一个节点,称为后继指针(next)
-
因此可以从后往前遍历链表,对于要访问链表后半部的节点的操作效率更高
// 双向链表的节点结构 typedef struct ListNode