链表的c语言实现(六)
一、轮回链表
轮回链表是与单链表一样,是一种链式的存储布局,所差异的是,轮回链表的最后一个结点的指针是指向该轮回链表的第一个结点可能表头结点,从而组成一个环形的链。
轮回链表的运算与单链表的运算根基一致。所差异的有以下几点:
1、在成立一个轮回链表时,必需使其最后一个结点的指针指向表头结点,而不是象单链表那样置为NULL。此种环境还利用于在最后一个结点后插入一个新的结点。
2、在判定是否到表尾时,是判定该结点链域的值是否是表头结点,当链域值便是表头指针时,说明已到表尾。而非象单链表那样判定链域值是否为NULL。
二、双向链表
双向链表其实是单链表的改造。
当我们对单链表举办操纵时,有时你要对某个结点的直接前驱举办操纵时,又必需从表头开始查找。这是由单链表结点的布局所限制的。因为单链表每个结点只有一个存储直接后继结点地点的链域,那么能不能界说一个既有存储直接后继结点地点的链域,又有存储直接前驱结点地点的链域的这样一个双链域结点布局呢?这就是双向链表。
在双向链表中,结点除含有数据域外,尚有两个链域,一个存储直接后继结点地点,一般称之为右链域;一个存储直接前驱结点地点,一般称之为左链域。在c语言中双向链表结点范例可以界说为:
typedef struct node
{
int data; /*数据域*/
struct node *llink,*rlink; /*链域,*llink是左链域指针,*rlink是右链域指针*/
}JD;
虽然,也可以把一个双向链表构建成一个双向轮回链表。
双向链表与单向链表一样,也有三种根基运算:查找、插入和删除。