双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。
先定义一个数据结构:
1 struct Date 2 { 3 int data; 4 struct Date *prior; 5 struct Date *next; 6 }Note;
1、插入操作
在平p、q间插入一个节点s.
主要完成两次握手:p和s,q和s;
(1)p和s的握手
p->next=s;
s->prior=p;
(2)s和q的握手
s->next=q;
q->prior=s;
原来的链接关系为p->next=q; q->prior=p;现在只知道p节点,且q=p->next;
因此,以上两次握手为:
s->prior=p; //s的前驱为p p->next->prior=s;//p的后继(即q)的前驱为s
s->next=p->next;//s的后继为p的后继(即q) p->next=s; //p的next为s
2、删除操作
删除p、q间的s节点
s->prior->next=s->next;
s->next->prior=s->prior;