1. 程式人生 > 程式設計 >Java基於連結串列實現棧的方法詳解

Java基於連結串列實現棧的方法詳解

本文例項講述了Java基於連結串列實現棧的方法。分享給大家供大家參考,具體如下:

在上幾小節中我們實現了基本的連結串列結構,並在上一節的底部給出了有關連結串列的原始碼,此處在貼一次吧,猛戳

在開始棧的實現之前,我們再來看看關於連結串列的只在頭部進行的增加、刪除、查詢操作,時間複雜度均為O(1),基於連結串列的這幾個優勢,我們在此基礎上實現棧。

Java基於連結串列實現棧的方法詳解

前言,在寫本小節之前,我們已經實現了一個基於靜態陣列的棧,轉到檢視。此處我們實現基於連結串列的棧。

1.連結串列類拷貝到Stack 包下:

在實現基於靜態陣列的棧的時候,我們已經新建了一個package,此時我們將已經實現的連結串列類拷貝到該package下,目錄結構為:

Java基於連結串列實現棧的方法詳解

2.實現棧

新建一個LinkedListStack類,實現Stack介面,相關程式碼如下:

Stack介面:

package Stack;

public interface Stack<E> {

  //棧中元素個數
  int getSize();

  //棧中元素個數是否為空
  boolean isEmpty();

  //進棧
  void push(E e);

  //出棧
  E pop();

  //檢視棧頂元素
  E peek();
}

個LinkedListStack類:

package Stack;

public class LinkedListStack<E> implements Stack<E> {
  private LinkedList<E> list;

  public LinkedListStack() {
    list = new LinkedList<E>();
  }

  //棧中元素個數
  @Override
  public int getSize() {
    return list.getSize();
  }

  //棧中是否為空
  @Override
  public boolean isEmpty() {
    return list.isEmpty();
  }

  //在棧中新增元素
  @Override
  public void push(E e) {
    list.addFirst(e);
  }

  //從棧中刪除第一個元素
  @Override
  public E pop() {
    return list.removeFirst();
  }

  //檢視棧中第一個元素
  @Override
  public E peek() {
    return list.getFirst();
  }


  //主要是便於輸出給物件資訊
  @Override
  public String toString() {
    StringBuilder res = new StringBuilder();
    res.append("Stack: top ");
    res.append(list);
    return res.toString();
  }

}

3.新增測試程式碼

為了測試的簡單,我們在已經實現了Stack介面的LinkedListStack類中建立以main()方法,main中程式碼如下:

  //測試
  public static void main(String[] args) {
    LinkedListStack<Integer> stack = new LinkedListStack<Integer>();
    for (int i = 0; i < 5; i++) {
      stack.push(i);
      System.out.println(stack);
    }
    System.out.println("出棧一個元素:");
    stack.pop();
    System.out.println(stack);
  }

結果為:

Java基於連結串列實現棧的方法詳解

到此我們實現了底層是連結串列的棧。

關於本小節,若您覺得還行、還過得去,記得給個推薦哦~,謝謝!!

本節原始碼 https://github.com/FelixBin/dataStructure/blob/master/src/Stack/LinkedListStack.java

更多關於java演算法相關內容感興趣的讀者可檢視本站專題:《Java資料結構與演算法教程》、《Java操作DOM節點技巧總結》、《Java檔案與目錄操作技巧彙總》和《Java快取操作技巧彙總》

希望本文所述對大家java程式設計有所幫助。