循环链表(1) - 介绍以及应用

在下面的这两篇文章中,已经讨论过了单链表和双向链表的基本情况。

"单链表 - 基本介绍以及插入节点",点此链接。

"双向链表(1) - 基本介绍以及插入节点",点此链接

循环链表是一个所有节点相互连接,形成一个环的数据结构。链表尾部没有null节点。循环链表可以是一个单向链表,也可以是双向链表。

循环链表的好处:

1) 任何节点都可以做为头节点。 可以从任何节点开始进行链表的遍历。只要当第一个节点被重复访问时,则意味着遍历结束。

2) 用于实现队列数据结构是很有帮组的。 如果使用循环链表,则不需要为了队列而维护两个指针(front以及rear)。只需要维护尾节点一个指针即可,因为尾节点的后向节点就是front了。

3) 循环链表常用于各应用程序中。 例如,当一台PC运行多个应用程序时,操作系统通常会把这些程序存入至一个链表,并进行循环遍历,给每个应用程序分配一定的时间来执行。此时循环链表对于OS是很有帮组的,当达到链表尾部时,可以方便的从头部重新开始遍历。

4) 循环双向链表可以用于实现高级数据结构,例如斐波那契堆(Fibonacci Heap)。

后续文章中会讨论循环链表的插入/删除操作。

时间: 2024-12-18 15:35:23

循环链表(1) - 介绍以及应用的相关文章

数据结构--循环链表与双向链表

一.循环链表 A.循环链表的介绍a.概念上1.任意数据元素都有一个前驱和一个后继2.所有数据元素的关系构成一个逻辑上的环b.实现上1.循环链表是一种特殊的单链表2.尾节点的指针域保存了首结点的地址关系图如下.循环链表的继承层次结构 二.循环链表的实现思路 A.思路1.通过模板定义CircleList类,继承自LinkList类2.定义内部函数last_to_first();用于将单链表首尾相连 Node* last()const//尾节点 { return this->position(this

java_Collection_详细介绍

转自:http://blog.sina.com.cn/s/blog_3fb3625f0101aref.html 1.类集框架 java.util 包中包含了一些在 Java 2 中新增加的最令人兴奋的增强功能:类集. 一个类集(collection)是一组对象.类集的增加使得许多 java.util 中的成员在结构和体系结构上发生 根本的改变.它也扩展了包可以被应用的任务范围.类集是被所有 Java 程序员紧密关注的 最新型的技术. 除了类集,java.util 还包含了支持范围广泛的函数的各种

Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 概要  和学习ArrayList一样,接下来呢,我们先对LinkedList有个整体认识,然后再学习它的源码:最后再通过实例来学会使用LinkedList.内容包括:第1部分 LinkedList介绍第2部分 LinkedList数

java实现循环链表

前面已经介绍了java实现单链表:http://www.cnblogs.com/lixiaolun/p/4643886.html 其实两者的主要差别就在于如何判断是否到了链表的结尾: 在单链表中 while(temp.next!=null) { temp=temp.next; } 在循环链表中 while(temp.next!=header) { temp=temp.next; } 下面是循环链表的代码和测试代码: 循环链表的代码: package circularlinkedlist; pub

循环链表(3) - 遍历

在循环链表系列的前2篇文章中,已经介绍了循环链表的基本情况以及插入操作.本篇讨论如何对它进行遍历操作. 通常对普通链表进行遍历时,一般从头节点开始,并遇到null节点时停止.而在循环链表中,当第二次到达首节点时,遍历停止. 下面是循环链表遍历代码实现: #include <iostream> //链表节点 struct Node { int data; Node *next; }; //在循环链表头部插入新的节点 void push(Node **head, int data) { Node

c语言双向循环链表

双向循环链表,先来说说双向链表,双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点.而循环链表之前也有说过,单链表中就是让最后一个结点的指针指向第一个结点就能构成一个循环链表,这里其实也是一样的,只不过多了一步,让第一个结点的前驱指向最后一个结点就行了,(这里介绍的是带头结点的双向循环链表,所以用第一个结点和头结点来区分两者).下面直接看看怎么创建一个带头结点的双向循环链表吧

双向循环链表(C++实现,兼具Boost单元测试)

本文双链表介绍部分参考自博文数组.单链表和双链表介绍 以及 双向链表的C/C++/Java实现. 1 双链表介绍 双向链表(双链表)是链表的一种.和单链表一样,双链表也是由节点组成,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点.一般我们都构造双向循环链表. 双链表的示意图如下: 表头为空,表头的后继节点为"节点10"(数据为10的节点):"节点10"的后继节点是"

JDK1.7-LinkedList循环链表优化

最近在看jdk1.7的时候,发现LinkedList 和1.6中的变化. 首先,简单介绍一下LinkedList: LinkedList是List接口的双向链表实现.由于是链表结构,所以长度没有限制:而且添加/删除元素的时候,只需要改变指针的指向(把链表断开,插入/删除元素,再把链表连起来)即可,非常方便,而ArrayList却需要重整数组 (add/remove中间元素).所以LinkedList适合用于添加/删除操作频繁的情况. -------------------------------

Linux内核循环链表经典分析和移植

为什么说这个链表做的经典呢,哥哥我从Linux内核里边儿扣出来的,要么怎么说内核不是一般人能写的,这代码太TM优美了! 这里有一篇参考文章:http://isis.poly.edu/kulesh/stuff/src/klist/,下面的分析来自其他人的分析这里做了整理,使得它便于阅读. 在linux内核中,有大量的数据结构需要用到双循环链表,例如进程.文件.模块.页面等.若采用双循环链表的传统实现方式,需要为这些数据结构维护各自的链表,并且为每个链表都要设计插入.删除等操作函数.因为用来维持链表