本文探讨了单独且双重链接的列表,这是计算机科学中的两个基本数据结构。通常会误解这些结构,最好通过相关的类比来理解这些结构:寻宝游戏。
了解单连锁的列表
单连接的列表是一系列互连节点。每个节点都保存数据和一个指针,引用序列中的下一个节点。这反映了一个寻宝游戏:每个线索(节点)包含一个消息(数据)和指令(指针),导致下一个线索。整个线索序列形成了完整的狩猎。
单连接的列表操作
我们将检查Node
和SinglyList
(或在我们的情况下是DoublyList
)构造函数的操作。
_length
:跟踪节点的数量。head
:指向第一个节点。tail
:指向最后一个节点(与单连锁列表的关键区别)。add(value)
:添加一个新节点。searchNodeAt(position)
:在特定索引处找到一个节点。remove(position)
:删除特定索引的节点。双关联列表实现
让我们在JavaScript中实现DoublyList
。
首先, Node
构造函数:
类节点{ 构造函数(value){ this.data = value; this.previous = null; //指向上一个节点的指针 this.next = null; //指向下一个节点的指针 } }
DoublyList
构造函数:
class doublyList { constructor(){ this._length = 0; this.head = null; this.tail = null; } }
双关联列表方法
以下是add(value)
, searchNodeAt(position)
和remove(position)
的实现,并修改为双向遍历。
add(value)
:
添加(value){ const node = new node(value); if(this._length){ this.tail.next = node; node.previous = this.tail; this.tail = node; } 别的 { this.head = node; this.tail = node; } this._length; 返回节点; }
searchNodeAt(position)
:(与单连接的列表版本相同)
searchNodeat(位置){ // ...(实施保持不变)... }
remove(position)
:
删除(位置){ // ...(实施更为复杂,处理四种情况:无效的位置,卸下头部,卸下尾巴,删除中间节点。请参阅原始文章以获取详细的实现。)... }
结论
本文使用了寻宝游戏类比,对单一和双重链接的列表进行了明确的解释。提供的JavaScript代码演示了双关联列表的实现,与单连锁列表相比,突出了关键差异和复杂性。请记住尝试代码以巩固您的理解。
以上是带有JavaScript的数据结构:单连锁列表和双关联列表的详细内容。更多信息请关注PHP中文网其他相关文章!