自定義連結串列(2):用連結串列的方式實現棧
阿新 • • 發佈:2019-01-03
通過學習自定義連結串列,瞭解連結串列的資料結構。
本篇以連結串列的方式實現棧。(參看以陣列的方式實現棧)
雖然自定義連結串列(1)中的連結串列的時間複雜度都為O(n),但若只對連結串列的表頭進行增、刪、查,都為O(1),利用這一點,可以用來實現棧。
首先寫一個棧的介面,描述其具有的基本功能。Stack.java
然後,引用自定義連結串列(1)中的: LinkedList.java
然後寫一個介面的實現類,這只是其中一種實現方式。LinkedListStack.java
最後寫一個測試類,測試自定義棧的效果。Test.java
LinkedListStack.java:
package algorithm; public class LinkedListStack <E> implements Stack<E>{ private LinkedList<E> list;//維護一個自定義的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(); } /** * 重寫Object的toString方法 */ @Override public String toString() { StringBuilder sb=new StringBuilder(); sb.append("Stack: top "); sb.append(list); return sb.toString(); } }
Test.java:
package algorithm; public class Test { public static void main(String[] args) { Stack<Integer> stack=new LinkedListStack<Integer>(); for(int i=0;i<5;i++) { stack.push(i); System.out.println(stack); } stack.pop(); System.out.println(stack); } }
控制檯輸出: