“Skip list 以随机层高实现有序字典/集合 ADT,因此是一种随机化算法。第 0 层含全部有序键,并以多层链表保存前向指针。每个节点独立以概率 $p$ 晋升到下一层,故 $$ \Pr[…”
形式陈述 ​
链表是一种用节点引用实现的抽象数据类型,表示有序序列而不要求元素在内存中连续。每个节点存数据与到后继的引用,双向链表还存前驱。给定节点引用时,插入和删除只改常数条链接,时间
直觉
数组通过连续地址与地址算术快速跳到任意位置,链表则把序列的相邻关系、“下一个在哪里”显式存成指针。已知节点位置时,插入或删除只改常数个链接;代价是不能通过下标直接跳到第
例子与边界
在已知节点
双链表可常数时间删除已知节点,但多一个反向指针并需维护双向一致性。空表、尾指针、循环链表和迭代中删除都会改变边界不变式;悬空指针与所有权问题属于实现正确性的核心。
推论与应用
链表常实现栈、队列、双端队列、LRU 链和邻接表;B+ 树还用叶链支持范围扫描。不可变链表可通过共享尾部构造持久版本。与数组相比,它以随机访问和局部性换取稳定节点地址及局部结构修改,具体 ADT 的操作次序仍应由接口而非指针布局规定。
跳表在底层全量链表之上随机建立稀疏快车道,以期望对数搜索换额外指针;Move-to-Front按访问重排链表,用竞争分析而非最坏查找界评价。两者都不是普通链表常数插删性质的直接推论。指针机模型只允许沿指针导航,不能把数组下标或 Word-RAM 位操作默认为常数,这正是链式结构下界与设计的模型边界。
参考资料
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Parts I–VI。
- Robert Sedgewick and Kevin Wayne, Algorithms, 4th ed., Addison-Wesley, 2011,Chs. 1–6。