双向链表的概念比较简单,只是在之前单链表的的基础上,每个结点多增加了一个指向直接前驱的指针。双向链表的存储结构定义如下:
typedef struct DulNode{ ElemType data; struct DulNode *prior; struct DulNode *next; }DulNode, *DuLinkList;
双向链表的操作基本上和单链表的操作一模一样。这里,实现一下链表元素的插入操作。比如,插入一个元素s,s之前一个结点是p。那么,只要把s的直接前驱指针指向p,把s的直接后继指针指向p的指向。然后,把p的直接后继指针指向s,把s的下一个结点的直接前驱指针指向s。代码如下:
s->prior = p; s->next = p->next; p->next = s; p->next->prior = s;
元素的删除操作与元素的插入操作类似。假设删除元素p。代码如下:
p->prior->next = p->next; p->next->prior = p->prior; free ( p ); //释放p结点
本文出自 “梵高说我脑子有病” 博客,请务必保留此出处http://chen0547.blog.51cto.com/12489941/1967268
原文地址:http://chen0547.blog.51cto.com/12489941/1967268