赞
踩
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表(解决了单链表只能从头结点依次访问顺序向后遍历的问题)
双链表中结点的类型表述如下:
typedef struct DNode{ //定义双链表结点类型
EleType data; //数据域
struct DNode *prior,*next; //前驱和后继指针
}DNode,*DLlinklist;
双链表的逻辑结构图:
1、插入操作
在双链表中p所指结点之前插入结点*s,其指针变化如下图:
插入操作的代码片段如下:
s->next = p->next; //将结点*s插入到结点*p之后
p->next->prior = s;
s->prior = p;
p->next = s;
【注】上述代码的语句顺序不唯一,但也不是任意的;如第一,二句必须在第四句之前。
2、删除操作
删除双链表中结点*p,其指针的变化过程如下图:
删除操作的片段代码如下:
p->next = q;
q->next =->prior = p;
free(q); //释放结点空间
【注】a为p结点,b为q结点
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。