Java基於連結串列實現棧的方法詳解
阿新 • • 發佈:2020-03-18
本文例項講述了Java基於連結串列實現棧的方法。分享給大家供大家參考,具體如下:
在上幾小節中我們實現了基本的連結串列結構,並在上一節的底部給出了有關連結串列的原始碼,此處在貼一次吧,猛戳
在開始棧的實現之前,我們再來看看關於連結串列的只在頭部進行的增加、刪除、查詢操作,時間複雜度均為O(1),基於連結串列的這幾個優勢,我們在此基礎上實現棧。
前言,在寫本小節之前,我們已經實現了一個基於靜態陣列的棧,轉到檢視。此處我們實現基於連結串列的棧。
1.連結串列類拷貝到Stack 包下:
在實現基於靜態陣列的棧的時候,我們已經新建了一個package,此時我們將已經實現的連結串列類拷貝到該package下,目錄結構為:
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); }
結果為:
到此我們實現了底層是連結串列的棧。
關於本小節,若您覺得還行、還過得去,記得給個推薦哦~,謝謝!!
本節原始碼 https://github.com/FelixBin/dataStructure/blob/master/src/Stack/LinkedListStack.java
更多關於java演算法相關內容感興趣的讀者可檢視本站專題:《Java資料結構與演算法教程》、《Java操作DOM節點技巧總結》、《Java檔案與目錄操作技巧彙總》和《Java快取操作技巧彙總》
希望本文所述對大家java程式設計有所幫助。