您的位置:首页 > 其它

结构之美:双向循环链表的结构与定义

2010-02-05 00:00 911 查看

双向链表

双(向)链表中有两条方向不同的链,即每个结点中除next域存放后继结点地址外,还增加一个指向其直接前趋的指针域prior。







注意:

链表由头指针head惟一确定的。

带头结点的双链表的某些运算变得方便。

将头结点和尾结点链接起来,为双(向)循环链表。

双向链表的结点结构和形式描述

结点结构(见上图)

形式描述如下:

typedef char ElemType;
struct NodeType2
{ 
	ElemType data;
  	NodeType2*next,*prior;
};
NodeType2*p,*q,*s;


双向链表的前插和删除本结点操作

由于双链表的对称性,在双链表能能方便地完成各种插入、删除操作。

1. 双链表的前插操作







{ 
	s->next=p;
	s->prior=p->prior;
	p->prior->next=s;
	p->prior==s;
}


2. 双链表上删除结点*p自身的操作







{ 
	p->prior->next=p->next
	p->next->prior=p->prior;
	free(p);
}


注意:

与单链表上的插入和删除操作不同的是,在双链表中插入和删除必须同时修改两个方向上的指针。

上述两个算法的时间复杂度均为O(1)。 

延伸阅读

此文章所在专题列表如下:

结构之美:定义一个线性表
结构之美:线性表的查找、插入与删除操作
结构之美:线性表的链式存储结构——链表
结构之美:单链表的初始化、创建与遍历
结构之美:单链表的头结点与头指针
结构之美:使用头插法创建单链表
结构之美:使用尾插法创建单链表
结构之美:单链表的销毁删除
结构之美:查找单链表指定位置结点的数据
结构之美:在单链表指定位置插入数据
结构之美:删除单链表指定位置的数据
结构之美:单链表逆序
结构之美:判断单链表中是否有环
结构之美:获取单链表倒数第N个结点值
单循环链表的初始化、创建、删除、查找与遍历
结构之美:双向循环链表的结构与定义
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表