单向链表只有一个指向后继的指针来表示结点间的逻辑关系,因此任意一结点开始找其后继结点很方便,但是要找其前驱结点比较麻烦。
双向链表是用两个指针表示结点的逻辑关系。即增加了一个指向其前驱的指针域,这样形成的链表又两种不同的链,即前驱和后继。因此称为双链表。在双向链表中,根据已知结点查找其直接前驱和指直接后继结点也很方便。
双向链表的结点定义:
typedef int elemtype;
typedef struct Dnode
{
struct Dnode *prior;
struct Dnode *next;
elemtype data;
}Dnode,*Dlinklist;
双向链表的结构图
prior | data | next |
双向链表的插入:
s->data = x;
s->next = p;
s->prior = p->prior;
p->prior = s;
s->prior->next = s;