双链表相关资料
来源:互联网 发布:java杨辉三角形代码 编辑:程序博客网 时间:2024/06/05 19:17
转载自http://blog.sina.com.cn/s/blog_65380c300100ij1s.html
双链表
(2010-04-25 21:42:44)转载▼
标签:
双向链表杂谈
分类:C/C++双向链表中,每个结点都有两个指针域,一个指向其后继结点,另一个指针指向其前驱结点,如图1.1(a)所示,因此,可以从某个结点开始朝两个方向遍历整个链表。
如果循环链表中每个结点都采用双向指针就构成了双向循环链表。图1.1(c)所示就是一个带头结点的双向循环链表,其尾结点的后继指针指向表的头结点,而表头结点的前驱指针指向表的尾结点。空的双向循环链表的结构如图1.1(b)所示。
双向链表中结点的类型定义如下:
typedef int datatype;
typedef struct node *ptNode;
struct note{
};
双链表是一种对称的结构,既有向前链又有向后链,这就使得双链表的前插和后插及自身删除操作都很方便,只需要修改几个结点的指针域,而不必进行大量的数据交换或遍历操作。下面给出双向链表的插入和删除运算的算法。
1 双向链表的前插运算
在双链表中某个给定的结点P之前插入一个新结点S,其操作步骤如下:
1)。将结点S的后继指向P本身;
2)。将结点S的前驱指向结点P的前驱所指向的结点;
3)。将结点P的前驱结点的后继修改为指向新结点S;
4)。将结点P的前驱修改为指向结点S本身;
插入新结点的过程如图1.2 (a)图所示。
双链表中在结点P之前插入一个新结点S的算法如下:
ptNode Insert_before(ptNode head,ptNode
{