zoukankan      html  css  js  c++  java
  • java实现链表(转)

    java实现链表 

    2010-03-12 17:27:08|  分类: JAVA笔记 |  标签: |字号订阅

     
     
    (1)简单链表 Java代码  1. package ChapterFive;   2.   3. class Link<E> {   4.   5.     public E data;   6.   7.     public Link<E> next;   8.  
    9.     public Link(E data) {   10.         this.data = data;   11.     }   12. }   13.   14. class LinkList<E> {   15.   16.     public Link<E> first;  
    17.     //链表中数据项的个数   18.     public int size;   19.   20.     public LinkList() {   21.         first = null;   22.         size = 0;   23.     }   24.     //在表头插入新的数据   25.     public void insertFirst(E value) {   26.         Link<E> link = new Link<E>(value);   27.         link.next = first;   28.         first = link;   29.         size++;   30.     }   31.     //判断链表是否为空   32.     public boolean isEmpty() {   33.         return size == 0;   34.     }   35.     //删除表头   36.     public Link<E> deleteFirst() {   37.         Link<E> temp = first;  
    38.         first = first.next;   39.         size--;   40.         return temp;   41.     }   42.     //输出链表中的所有数据   43.     public void display() {   44.         Link<E> curr = first;   45.         while (curr != null) {   46.             System.out.print(curr.data + " ");   47.             curr = curr.next;   48.         }   49.         System.out.println();   50.     }   51.     //返回链表中数据项的个数  
    52.     public int size() {   53.         return size;   54.     }  
    55.     //获取从头至尾的第i个数据项   56.     public Link<E> get(int i) {  
    57.         if (i > size() - 1 || i < 0)   58.             try {  
    59.                 throw new IndexOutOfBoundsException();   60.             } catch (Exception e) {   61.                 e.printStackTrace();   62.             }   63.         Link<E> curr = first;   64.         for (int n = 0; n < size(); n++) {   65.             if (n == i)   66.                 return curr;   67.             else  68.                 curr = curr.next;   69.         }   70.         return null;   71.     }   72.     //输出从头至尾的第i个数据项  
    73.     public void remove(int i) {   74.         if (i == 0)   75.             deleteFirst();   76.         else if (i == size() - 1)   77.             get(i - 1).next = null;   78.         else {   79.             get(i - 1).next = get(i + 1);   80.         }   81.         size--;   82.     }   83. }   84.   85. public class Link_list {   86.     public static void main(String[] args) {   87.         LinkList<Long> ll = new LinkList<Long>();   88.         for (int i = 0; i < 10; i++) {   89. Long value = (long) (Math.random() * 100); 90.             ll.insertFirst(value);   91.         }   92.         ll.display();   93.         while (!ll.isEmpty()) {   94.             ll.deleteFirst();   95.             ll.display();   96.         }   97.         System.out.println("Ok");  
    98.     }   99. } 
    (2)链栈 Java代码  1. package ChapterFive;   2.   3. class LinkStack<E> {   4.   5.     LinkList<E> linkList;   6.   7.     int size;   8.   9.     public LinkStack() {   10.         size = 0;   11.         linkList = new LinkList<E>();   12.     }   13.     //入栈   14.     public void push(E value) {   15.         linkList.insertFirst(value);  
    16.         size++;   17.     }   18.     //出栈   19.     public Link<E> pop() {   20.         size--;   21.         return linkList.deleteFirst();   22.     }   23.     //返回栈顶元素   24.     public Link<E> top() {   25.         return linkList.first;   26.     }   27.     //判断栈是否为空   28.     public boolean isEmpty() {   29.         return size == 0;   30.     }   31.     //显示栈中的全部数据   32.     public void display() {   33.         linkList.display();   34.     }   35. }   36.   37. public class Link_stack {   38.     public static void main(String[] args) {   39.         LinkStack<Long> ls = new LinkStack<Long>();   40.         for (int i = 0; i < 10; i++) {   41.             Long value = new Long((long) (Math.random() * 100));  
    42.             ls.push(value);   43.         }   44.         while (!ls.isEmpty()) {   45.             ls.pop();   46.             ls.display();   47.         }   48.         System.out.println("Ok");  
    49.     }   50. } 
    (3)有序表 Java代码  1. package ChapterFive;   2.   3. class SortedLink {   4.   5.     public Link<Long> first;   6.   7.     int size;   8.   9.     public SortedLink() {   10.         first = null;   11.         size = 0;   12.     }   13.     //向有序链表中插入数据   14.     public void insert(long value) {   15.         Link<Long> newLink = new Link<Long>(value);   16.         Link<Long> previous = null;  
    17.         Link<Long> curr = first;   18.         while (curr != null && (value > curr.data)) {   19.             previous = curr;   20.             curr = curr.next;   21.         }   22.         if (previous == null)// 链表为空(在表头插入)   23.             first = newLink;   24.         else  25.             previous.next = newLink;//插入新的节点   26.         newLink.next = curr;   27.         size++;   28.     }   29.     //删除第一个节点   30.     public Link<Long> remove() {   31.         Link<Long> temp = first;  
    32.         first = first.next;   33.         size--;   34.         return temp;   35.     }   36.     //判断链表是否为空   37.     public boolean isEmpty() {   38.         return size == 0;   39.     }  
    40.     //输出链表的所有数据   41.     public void display() {   42.         Link<Long> curr = first;   43.         while (curr != null) {  
    44.             System.out.print(curr.data + " ");   45.             curr = curr.next;   46.         }   47.         System.out.println();   48.     }   49. }   50.   51. public class SortedLinkApp {   52.     public static void main(String[] args) {  
    53.         SortedLink sl = new SortedLink();   54.         for (int i = 0; i < 10; i++) {   55.             sl.insert((long) (Math.random() * 100));   56.         }   57.         while (!sl.isEmpty()) {   58.             sl.remove();   59.             sl.display();   60.         }   61.     }   62. } 
    (4)双向链表 Java代码  1. package ChapterFive;   2.   3. class DoubleLink<E> {   4.   5.     public Link<E> first;   6.   7.     public Link<E> last;  
    8.   9.     int size;   10.   11.     @SuppressWarnings("hiding")   12.     class Link<E> {   13.         public E data;   14.   15.         public Link<E> next;// 链表的下一项   16.   17.         public Link<E> previous;// 链表的前一项   18.   19.         public Link(E value) {   20.             this.data = value;   21.         }   22.     }   23.   24.     public DoubleLink() {   25.         first = null;   26.         last = null;   27.         size = 0;   28.     }   29.   30.     // 在链表的首部插入一项   31.     public void insertFirst(E value) {   32.         Link<E> newLink = new Link<E>(value);   33.         if (isEmpty())// 如果链表为空则first == last   34.             last = newLink;  
    35.         else  36.             first.previous = newLink;// 确定原first与newLink的前后关系   37.         newLink.next = first;   38.         first = newLink;// 设置新的first值   39.         size++;   40.     }  
    41.   42.     // 在链表的尾部插入一项   43.     public void insertLast(E value) {   44.         Link<E> newLink = new Link<E>(value);  
    45.         if (isEmpty())// 如果链表为空则last == first   46.             first = newLink;   47.         else {   48.             last.next = newLink;// 确定原last与newLink的前后关系   49.             newLink.previous = last;  
    50.         }   51.         last = newLink;// 设置新的last值   52.         size++;   53.     }   54.   55.     // 删除双向链表的表头   56.     public Link<E> deleteFirst() {   57.         Link<E> temp = first;   58.         if (first.next == null)// 链表中只有一项数据   59.             last = null;   60.         else  61.             first.next.previous = null;// 销毁原链表的头部   62.         first = first.next;  
    63.         size--;   64.         return temp;   65.     }   66.   67.     // 删除链表的最后一项   68.     public Link<E> deleteLast() {  
    69.         Link<E> temp = last;   70.         if (first.next == null)// 链表中只有一项数据   71.             first = null;   72.         else 
    73.             last.previous.next = null;// 销毁原链表的尾部   74.         last = last.previous;   75.         size--;   76.         return temp;  
    77.     }   78.   79.     // 判断链表是否为空   80.     public boolean isEmpty() {   81.         return size == 0;   82.     }   83.  
    84.     // 输出链表中的所有数据项   85.     public void display() {   86.         Link<E> curr = first;   87.         while (curr != null) {  
    88.             System.out.print(curr.data + " ");   89.             curr = curr.next;   90.         }   91.         System.out.println();   92.     }   93. }   94.   95. public class DoubleLinkApp {   96.     public static void main(String[] args) {  
    97.         DoubleLink<Integer> dl = new DoubleLink<Integer>();   98.         for (int i = 0; i < 5; i++) {   99.             dl.insertFirst((int) (Math.random() * 100));   100.         }   101.         for (int i = 0; i < 5; i++) {   102.             dl.insertLast((int) (Math.random() * 100));   103.         }  
    104.         dl.display();   105.         while (!dl.isEmpty()) {  
    106.             dl.deleteFirst();   107.             dl.deleteLast();  
    108.             dl.display();   109.         }   110.         System.out.println("Ok");   111.     }   112. }
  • 相关阅读:
    【译】用 Chart.js 做漂亮的响应式表单
    【译】快速高效学习Java编程在线资源Top 20
    【译】理解Spring MVC Model Attribute 和 Session Attribute
    Github 恶搞教程(一起『玩坏』自己的 Github 吧)
    Effective Java 读书笔记(一):使用静态工厂方法代替构造器
    JavaScript 中 onload 事件绑定多个方法的优化建议
    【译】常见 Java 异常解释(恶搞版)
    Java 重写 equals 与 hashCode 的注意事项
    【译】Java语言速览:StackOverflow
    【译】StackOverflow——Java 中的 finally 代码块是否总会被执行?
  • 原文地址:https://www.cnblogs.com/guanghuiqq/p/2738504.html
Copyright © 2011-2022 走看看