系列文章参考资料为《大话数据结构》,源码为个人私有,未经允许不得转载 技术交流群或资料添加微信号:CoderAllen,回复关键字即可
双向链表是在单链表的每个结点中,在设置一个指向其前驱结点的指针域
其代码表示:
/*线性表的双向链表存储结构*/
typedef struct DulNode
{
ElemType data;
struct DuLNode *prior; /*直接前驱指针*/
struct DuLNode *next; /*直接后继指针*/
} DulNode, *DuLinkList;
同理,双向链表的空循环表为:
非空的循环的带头结点的双向链表:
双向链表既然是比单链表多了可以反向遍历查找等数据结构,也就付出了一些代价,比如在插入和删除的时候,需要更改两个指针变量
操作不复杂,不过顺序非常重要
其步骤是:
s - >prior = p; /*把p赋值给s的前驱,如图中①*/
s -> next = p -> next; /*把p->next赋值给s的后继,如图中②*/
p -> next -> prior = s; /*把s赋值给p->next的前驱,如图中③*/
p -> next = s; /*把s赋值给p的后继,如图中④*/
同理其删除步骤是:
p->prior->next=p->next; /*把p->next赋值给p->prior的后继,如图中①*/
p->next->prior=p->prior; /*把p->prior赋值给p->next的前驱,如图中②*/
free(p); /*释放结点*/
--------------------------------------------------------END----------------------------------------------------------- 电子书及源码点击下载