1. 程式人生 > >自定義連結串列(2):用連結串列的方式實現棧

自定義連結串列(2):用連結串列的方式實現棧

通過學習自定義連結串列,瞭解連結串列的資料結構。

本篇以連結串列的方式實現棧。(參看以陣列的方式實現棧

 

雖然自定義連結串列(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);
	}

}

 

控制檯輸出: