• Java数据结构——循环链表的实现


     1 //单链表结点类
     2 public class Node<T> {             //单链表结点类,T指定结点的元素类型
     3 
     4     public T data;                 //数据域,保存数据元素
     5     public Node<T> next;           //地址域,后任结点引用
     6 
     7     //构造结点,data指定数据元素,next指定后继结点
     8     public Node(T data, Node<T> next) {
     9         this.data = data;
    10         this.next = next;
    11     }
    12 
    13     public Node() {
    14         this(null, null);
    15     }
    16 
    17     //返回结点对应的字符串
    18     public String toString() {
    19         return this.data.toString();
    20     }
    21 
    22     //比较两个结点值是否相等,覆盖Object类的equals(obj)方法
    23     public boolean equals(Object obj) {
    24         return obj == this || obj instanceof Node && this.data.equals(((Node<T>) obj).data);
    25     }
    26 }
     1 //循环单链表类,实现线性表接口
     2 public class LoopLinkList<T> {
     3 
     4     //头指针,指向循环单链表的头结点
     5     public Node<T> head;
     6 
     7     //默认构造方法,构造空循环单链表
     8     public LoopLinkList() {
     9         this.head = new Node<T>();
    10         this.head.next = this.head;  ////创建头结点
    11     }
    12 
    13     //判断循环单链表是否空
    14     public boolean isEmpty() {
    15         return this.head.next == this.head;
    16     }
    17 
    18     //由element数组中的多个对象构造单链表。采用尾插入构造单链表
    19     public LoopLinkList(T[] element) {
    20         this();                                                  //创建空单链表,只有头结点
    21         Node<T> rear = this.head;                                //rear指向单链表最后一个结点
    22         for (int i = 0; i < element.length; i++) {               //若element==null,抛出空对象异常
    23             //若element.length==0,构造空链表
    24             rear.next = new Node<T>(element[i], this.head);      //尾插入,创建结点链入rear结点之后
    25             rear = rear.next;                                    //rear指向新的链尾结点
    26         }
    27     }
    28 
    29     //返回循环单链表长度,单链表遍历算法,O(n)
    30     public int length() {
    31         int i = 0;
    32         for (Node<T> p = this.head.next; p != this.head; p = p.next)
    33             i++;
    34         return i;
    35     }
    36 
    37     //返回第i(≥0)个元素,若i<0或大于表长则返回null,O(n)
    38     public T get(int i) {
    39         if (i >= 0) {
    40             Node<T> p = this.head.next;
    41             for (int j = 0; p != this.head && j < i; j++)
    42                 p = p.next;
    43             if (p != this.head)
    44                 return p.data;                             //p指向第i个结点
    45         }
    46         return null;                                       //当i<0或大于表长时
    47     }
    48 
    49     //设置第i(≥0)个元素值为x。若i<0或大于表长则抛出序号越界异常;若x==null,不操作。O(n)
    50     public void set(int i, T x) {
    51         if (x == null) return;                              //不能设置空对象
    52         Node<T> p = this.head.next;
    53         for (int j = 0; p != this.head && j < i; j++)
    54             p = p.next;
    55         if (i >= 0 && p != this.head)
    56             p.data = x;                                    //p指向第i个结点
    57         else throw new IndexOutOfBoundsException(i + "");    //抛出序号越界异常
    58     }
    59 }
     1  public static void main(String args[]){
     2 
     3         Integer[] array=new Integer[]{12,25,55,78,99,-17};
     4         LoopLinkList<Integer> linkList =new  LoopLinkList<Integer>(array);
     5 
     6         int length=linkList.length();
     7         int a=linkList.get(5);
     8 
     9         System.out.println("链表是否为空:"+linkList.isEmpty());
    10         System.out.println("链表长度是:"+length);
    11         System.out.println("获取指定位置的数据是:"+a);
    12 
    13         for(int i=0;i<length;i++)
    14             System.out.println(linkList.get(i));
    15 
    16         linkList.set(1,200);
    17 
    18         for(int i=0;i<length;i++)
    19             System.out.println(linkList.get(i));
    20     }
  • 相关阅读:
    前端技术-PS切图
    Html5资料整理
    Html5知识体系
    Html知识体系
    C语言知识结构
    ASP.NET知识结构
    src和href的区别
    Ajax的简单使用
    学习理论
    求模运算法则
  • 原文地址:https://www.cnblogs.com/huangjianping/p/8289801.html
Copyright © 2020-2023  润新知