• 1、单项循环列表

     单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环。和单链表相比,循环单链表的长处是从链尾到链头比较方便。当要处理的数据元素序列具有环型结构特点时,适合于采用循环单链表。

  • 2、单向循环链表

     和单链表相同,循环单链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表实现插入和删除操作时,算法实现较为方便。带头结点的循环单链表结构如下:

     双向循环链表的Java版本实现

 

带头结点的循环单链表的操作实现方法和带头结点的单链表的操作实现方法类同,差别仅在于:

(1)在构造函数中,要加一条head.next = head 语句,把初始时的带头结点的循环单链表设计成图2-11 (a)所示的状态。

(2)在index(i)成员函数中,把循环结束判断条件current != null改为current != head。

  • 双向循环链表

      双向链表是每个结点除后继指针外还有一个前驱指针。和单链表类同,双向链表也有带头结点结构和不带头结点结构两种,带头结点的双向链表更为常用;另外,双向链表也可以有循环和非循环两种结构,循环结构的双向链表更为常用

      在双向链表中,每个结点包括三个域,分别是element域、next域和prior域,其中element域为数据元素域,next域为指向后继结点的对象引用,prior域为指向前驱结点的对象引用。

如下图是带头结点的循环双向链表的图示结构。循环双向链表的next和prior各自构成自己的循环单链表。

双向循环链表的Java版本实现

在双向链表中,有如下关系:设对象引用p表示双向链表中的第i个结点,则p.next表示第i+1个结点,p.next.prior仍表示第i个结点,即p.next.prior == p;同样地,p.prior表示第i-1个结点,p.prior.next仍表示第i个结点,即p.prior.next == p。下图是双向链表上述关系的图示。

双向循环链表的Java版本实现

循环双向链表的插入过程如下图所示。图中的指针p表示要插入结点的位置,s表示要插入的结点,①、②、③、④表示实现插入过程的步骤。

双向循环链表的Java版本实现

 

 

 //==========================================我是代码的分割线

//具体代码的分析已经详细的写在了解析里面,欢迎讨论

 1 /**
 2  * 本项目主要是通过几个类来组合实现
 3  * 1、List的线性表的接口
 4  * 2、Node节点类的具体方法
 5  * 3、单项链表类的具体实现
 6  */
 7 
 8 
 9 /**
10  * 线性表接口
11  */
12 public interface List {
13 
14     // 获得线性表的长度
15     public int size();
16 
17     // 判断是否为空
18     public boolean isEmpty();
19 
20     // 插入操作,需要抛出异常
21     public void insert(int index, Object obj) throws Exception;
22 
23     // 删除元素
24     public void delete(int index) throws Exception;
25 
26     // 获取指定位置元素
27     public Object get(int index) throws Exception;
28 
29 }
List interface

相关文章:

  • 2021-07-05
  • 2021-10-05
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2023-01-07
猜你喜欢
  • 2021-08-20
  • 2022-12-23
  • 2022-12-23
  • 2021-07-26
  • 2022-12-23
  • 2021-12-05
相关资源
相似解决方案