数据结构之循环链表
2014-05-16 23:28
211 查看
循环链表是数据结构中链表的一种形式。相对于单向链表,将单向链表的尾结点的指针域指向该单向链表的头结点,就构成了循环链表。
可以这么理解,单向链表就是一张单程火车票,比如你要从北京坐火车去上海,路上经过济南、南京,此时北京、济南、南京、上海就构成了单向链表的四个结点,如下图所示。
但是,单向链表是有去无回的,也就是从北京去了上海,那你就永远别回来了。那如果想回北京怎么办?而且是想舒服地回去(坐飞机回去),此时就去买张上海到北京的机票,也就是将上海和北京直接连起来,起点是上海,终点是北京。这也就构成了本文所说的循环链表。如下图所示。
循环链表包括两种形式:一种为不带头结点的循环链表,即任何一个结点都可以当作头结点,如上图所示;另一种为带头结点的循环链表,如下图所示。一般来说,该头结点内容或者为空,或者可以记录链表长度等信息。
由于在数据结构之链表单向操作总结一文中已经详细总结了单向链表的各种操作,且循环链表也比较好理解,在此就不写过多的示例,只写一个在循环链表中查找结点的算法来抛砖引玉吧。
与单向链表比较,循环链表可以从任意结点出发遍历整个链表,这也是循环链表的优势所在。
可以这么理解,单向链表就是一张单程火车票,比如你要从北京坐火车去上海,路上经过济南、南京,此时北京、济南、南京、上海就构成了单向链表的四个结点,如下图所示。
但是,单向链表是有去无回的,也就是从北京去了上海,那你就永远别回来了。那如果想回北京怎么办?而且是想舒服地回去(坐飞机回去),此时就去买张上海到北京的机票,也就是将上海和北京直接连起来,起点是上海,终点是北京。这也就构成了本文所说的循环链表。如下图所示。
循环链表包括两种形式:一种为不带头结点的循环链表,即任何一个结点都可以当作头结点,如上图所示;另一种为带头结点的循环链表,如下图所示。一般来说,该头结点内容或者为空,或者可以记录链表长度等信息。
由于在数据结构之链表单向操作总结一文中已经详细总结了单向链表的各种操作,且循环链表也比较好理解,在此就不写过多的示例,只写一个在循环链表中查找结点的算法来抛砖引玉吧。
public Node searchItem(Object data) { Node p = m_headNode.getNext(); while(p != m_headNode) { if(p.getData() == data) { return p; } p = p.getNext(); } return null; }
与单向链表比较,循环链表可以从任意结点出发遍历整个链表,这也是循环链表的优势所在。
相关文章推荐
- C++实现数据结构三 双向循环链表
- java与数据结构(4)---java实现双向循环链表
- 数据结构--双向循环链表C实现
- 数据结构_循环链表
- 数据结构:带头结点的双向循环链表
- 数据结构的C实现_双向循环链表
- 数据结构-内核的双向循环链表-简单实现
- 数据结构学习之循环链表结构
- 【数据结构】 双循环链表代码演示
- 数据结构Java实现 ----循环链表、仿真链表
- 《Delphi 算法与数据结构》学习与感悟[9]: 循环链表
- 数据结构Java实现04----循环链表、仿真链表
- 数据结构:循环单向链表——约瑟夫环
- 数据结构 循环链表、双向链表、一元多项式
- 【数据结构】用C++实现单循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- 数据结构 05 链表 循环链表
- C语言数据结构之判断循环链表空与满
- 数据结构(四)——单链表 、带头结点的单链表、循环链表 及其实现
- 数据结构_循环链表
- JavaScript数据结构之单向循环链表应用-约瑟夫问题