学习数据结构已经三天,刚开始自然遇到线性表。其中线性表内含顺序表和链表。顺序表较为简单,仅仅需要一个数组就可以完成,当然最好也要添加一个表示长度的数据成员,如size。而链表,显然比较多变看,小可不才,用了将近三天的时间才能明白,不能不说见笑于大方之家;皆因链表之中还有循环链表,双向链表,双向循环链表。好了,言归正传:循环链表的程序奉上:

链表,不过增(insert)删(delete)改(update)查(select)而已。在于Java程序中,还要加上构造(Java有垃圾回收机制,故没有析构,但可以手动回收)。先看代码如下:

1、关于构造函数,小生理解到:需要什么样的初始化,就写出什么样的构造函数,当然,没有时类也会人性化的构造一个空的构造函数;本人就节点有一个构造函数

2、在方法中,注意index的具体代表就行。其中,在找上一节点时,很多重复了,可以另外写入一个函数中。

3、最后只是一个测试形式的,可以自己设置

4、自认为一个比较简单的程序了

 

   
   
   
   
  1. package link;  
  2.  
  3. class Node {  
  4.     public int num;  
  5.     public Node next;  
  6.  
  7.     public Node(int num, Node next) {  
  8.         this.num = num;  
  9.         this.next = next;  
  10.     }  
  11. }  
  12.  
  13. public class CycleList {  
  14.     public Node head;  
  15.     public int size;  
  16.  
  17.     public void insertHead(int element){       //在头结点的地方插入,还有就是在插入函数时跳入  
  18.         if(size == 0){  
  19.             head = new Node(element, head);  
  20.         }else {  
  21.             Node no = head;  
  22.             head = new Node(element, no);  
  23.         }  
  24.         size ++;  
  25.     }  
  26.       
  27.     public void insert(int index, int element) { //插入元素  
  28.         if (size == 0) {  
  29.             head = new Node(element, head);  
  30.         } else {  
  31.             if (index < 0) {  
  32.                 index = 0;  
  33.             }  
  34.             if (index > size) {  
  35.                 index = size;  
  36.             }  
  37.             Node no1 = head;  
  38.             for (int i = 0; i < index - 1; i++) {  
  39.                 no1 = no1.next;  
  40.             }  
  41.             Node no2 = new Node(element, no1.next);  
  42.             no1.next = no2;  
  43.         }  
  44.         size++;  
  45.     }  
  46.  
  47.     public void delete(int index) {             // 删除函数  
  48.         if (index < 0) {  
  49.             index = 0;  
  50.         }  
  51.         if (index > size) {  
  52.             index = size;  
  53.         }  
  54.         Node no3 = head;  
  55.         for (int i = 0; i < index - 1; i++) {   
  56.             no3 = no3.next;  
  57.         }  
  58.         no3.next = no3.next.next;  
  59.  
  60.         size--;  
  61.     }  
  62.  
  63.     public void select() {                     // 查询所有元素  
  64.         int sizelong = size;  
  65.         Node no4 = head;  
  66.         for (int i = 0; i < sizelong; i++) {  
  67.             System.out.print(no4.num);  
  68.             no4 = no4.next;  
  69.         }  
  70.     }  
  71.  
  72.     public void update(int index, int element){ //更换index位置的内容  
  73.         Node no7 = head;  
  74.         for(int i=0; i1; i++){  
  75.             no7 = no7.next;  
  76.         }  
  77.         no7.num = element;  
  78.     }  
  79.       
  80.     public void sel(int index){                 //查询index位置的内容  
  81.         Node no8 = head;  
  82.         for(int i=0; i1; i++){  
  83.             no8 = no8.next;  
  84.         }  
  85.         System.out.println(no8.num);  
  86.     }  
  87.       
  88.     public static void main(String[] args) {  
  89.         CycleList cl = new CycleList();  
  90.         cl.insert(04);               // index 代表第几个后面,当然,第0个后面,即为插头节点  
  91.         cl.insert(22);               // 无论插入还是删除  
  92.         cl.insert(35);               //更改很准确  
  93.         cl.insert(46);               // 查询单个也是可以的  
  94.         cl.insert(59);  
  95.  
  96.         cl.select();  
  97.         System.out.print(" ----");  
  98.         cl.insert(08);   
  99.         cl.select();  
  100.         System.out.print(" ----");  
  101.         cl.insertHead(3);  
  102.         cl.select();  
  103.         System.out.println("------");  
  104.         cl.delete(3);  
  105.         cl.select();  
  106.         System.out.println("---------");  
  107.         cl.update(11);  
  108.         cl.select();  
  109.         System.out.print("----");  
  110.         cl.sel(0);  
  111.     }