| 论坛注册| 加入收藏 | 设为首页| RSS
Google
您当前的位置:首页 > Linux频道 > Linux开发区 > 软件开发

链表的c语言实现(六)

时间:2006-07-08 00:58:12  来源:编程中国  作者:Linux联盟收集

一、循环链表vK6Linux联盟
循环链表是与单链表一样,是一种链式的存储结构,所不同的是,循环链表的最后一个结点的指针是指向该循环链表的第一个结点或者表头结点,从而构成一个环形的链。vK6Linux联盟
循环链表的运算与单链表的运算基本一致。所不同的有以下几点:vK6Linux联盟
1、在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是象单链表那样置为NULL。此种情况还使用于在最后一个结点后插入一个新的结点。 vK6Linux联盟
2、在判断是否到表尾时,是判断该结点链域的值是否是表头结点,当链域值等于表头指针时,说明已到表尾。而非象单链表那样判断链域值是否为NULL。vK6Linux联盟

二、双向链表vK6Linux联盟
双向链表其实是单链表的改进。vK6Linux联盟
当我们对单链表进行操作时,有时你要对某个结点的直接前驱进行操作时,又必须从表头开始查找。这是由单链表结点的结构所限制的。因为单链表每个结点只有一个存储直接后继结点地址的链域,那么能不能定义一个既有存储直接后继结点地址的链域,又有存储直接前驱结点地址的链域的这样一个双链域结点结构呢?这就是双向链表。vK6Linux联盟
在双向链表中,结点除含有数据域外,还有两个链域,一个存储直接后继结点地址,一般称之为右链域;一个存储直接前驱结点地址,一般称之为左链域。在c语言中双向链表结点类型可以定义为: vK6Linux联盟
typedef struct nodevK6Linux联盟
{vK6Linux联盟
int data; /*数据域*/vK6Linux联盟
struct node *llink,*rlink; /*链域,*llink是左链域指针,*rlink是右链域指针*/vK6Linux联盟
}JD;vK6Linux联盟
当然,也可以把一个双向链表构建成一个双向循环链表。vK6Linux联盟
双向链表与单向链表一样,也有三种基本运算:查找、插入和删除。vK6Linux联盟
vK6Linux联盟

 vK6Linux联盟

来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
    无相关信息
栏目更新
栏目热门