双向链表的实现

Posted on 2012-05-14 15:03  逝水如年  阅读(307)  评论(0)    收藏  举报

本节紧跟上一节:

单链表实现

只需要修改单向链表的两个方法就可以:

修改节点的结构:

1 /*双向链表数据结构*/
2 struct node {
3     unsigned char item;
4     link prev,next;
5 };

一个是插入方法:

 1 /**
 2  * 功能:插入节点
 3  * return:void
 4  */
 5 void insert(link p)
 6 {
 7     //p的下一个是head
 8     p->next = head;
 9     //如果head存在
10     if(head){
11         //head的上一个是p
12         head->prev = p;
13     }
14     //将刚插入的p赋值给head
15     head = p;
16     //p的上一个不存在
17     p->prev = NULL;
18 }

一个是删除方法:

 1 /**
 2  * 功能:删除节点
 3  * return:void
 4  */
 5  /*详细说明
 6   *比如有a,b,c三个节点
 7   * a->prev = NULL;a->next = b;
 8   * b->prev = a;b->next = c;
 9   * c->prev = b;c->next = NULL;
10   * 现在删除其中的b节点,那么
11   * a->prev = NULL;
12   * a(b->prev)->next = b->next;
13   * c(b->next)->prev = b->prev;
14   * */
15 void delete(link p)
16 {
17     //如果p的上一个存在
18     if (p->prev) {
19         //p的上一个的下一个 等于 p的下一个
20         p->prev->next = p->next; 
21     } else {
22         //p的上一个不存在那么就只剩下head,head就等于p的下一个
23         head = p->next;
24     }
25     //如果p的下一个存在
26     if (p->next) {
27         //p的下一个的上一个 等于 p的上一个
28         p->next->prev = p->prev;
29     }
30 }

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3