数据结构线性表之双向链表
双向链表
在结点中设两个引用域,一个保存直 接前驱结点的地址,叫 prev,一个直接后继结点的地址,叫 next,这样的链表就 是双向链表(Doubly Linked List)。双向链表的结点结构示意图如图 2.15 所示。

双向链表结点类的实现如下所示。
public class DbNode<T> { private T data; //数据域 private DbNode<T> prev; //前驱引用域 private DbNode<T> next; //后继引用域 //构造器 public DbNode(T val, DbNode<T> p) { data = val; next = p; } //构造器 public DbNode(DbNode<T> p) { next = p; } //构造器 public DbNode(T val) { data = val; next = null; } //构造器 public DbNode() { data = default(T); next = null; } //数据域属性 public T Data { get { return data; } set { data = value; } } //前驱引用域属性 public DbNode<T> Prev { get { return prev; } set { prev = value; } } //后继引用域属性 public DbNode<T> Next { get { return next; } set { next = value; } } }
设 p 是指向双向链表中的某一结点,即 p 存储的是该结点的地址,现要将一 个结点 s 插入到结点 p 的后面,插入过程如图 2.16 所示(以 p 的直接后继结点 存在为例)。

设 p 是指向双 向链表中的某一结点,即 p 存储的是该结点的地址,现要将一个结点 s 插入到结 点 p 的后面,插入过程如图 2.17 所示(以 p 的直接后继结点存在为例)。

循环链表
最后一个结点的引用域不是空引用, 而是保存的第一个结点的地址(如果该链表带结点,则保存的是头结点的地址), 也就是头引用的值。带头结点的循环链表(Circular Linked List)如图 2.18 所示。

循环链表的基本操作与单链表大体相同,只是判断链表结束的条件并不是判 断结点的引用域是否为空,而是判断结点的引用域是否为头引用,其它没有较大的变化。

浙公网安备 33010602011771号