数据结构算法代码实现——循环链表、双向链表(五)

来源:互联网 发布:软件怎么root 编辑:程序博客网 时间:2024/06/08 01:52

循环链表

    循环链表是一种特殊的链表,其特点是,表中最后一个结点的指针域指向头结点,整个链表的首位结点相连形成一个环。 因此,从循环链表中的任何结点出发都可以找到其他结点    循环链表的操作运算和单链表的我操作基本相同,两者最大的差别在于:遍历链表时的终止条件不同。 在链表中,用指针域是否为空判断表尾的条件;而在循环链表中,则用指针域是否指向表头结点作为条件。

循环链表设置尾指针

    有些时候,我们操作链表大多是在表头、表尾操作。若用头指针查找首结点a1的时间复杂度是O(1),而查找表尾an则时间复杂度为o(n)。 循环链表既然可以形成一个环,所以我们可以设置尾指针而不设置头指针的循环链表,这样无论查找首元结点还是尾结点时间复杂度都是O(1)。

双向链表

    由于单链表的每个结点只有一个指示其直接后继的指针域,返回前驱结点很难,为了克服这种缺点,可以采用双向链表的存储结构。

双向链表的存储结构

线性表的双向链表存储结构

typedef struct DuLNode{   ElemType data;   struct DuLNode *prior,*next; }DuLNode,*DuLinkList;

双向循环链表的基本操作

12个基本操作:

1,测试代码可以参考单链表的代码,只需修改成员变量即可。

2,测试结果图:
这里写图片描述

3,总结:

    双向循环链表的插入和删除操作:    插入操作的自然语言描述:        1)令s的前驱指针指向p结点;        2)令s的后继指针指向q结点的直接后继        3)令p结点直接后继的前驱指针指向s        4)令p结点的直接后继指针指向p    删除操作的自然语言描述:        1)令p结点的前驱结点的后继指针指向p的后继结点        2)令p的后继结点的求前驱指针指向p的前驱结点        3)释放结点p
0 0
原创粉丝点击