1. 程式人生 > >用連結串列實現棧(Java版)

用連結串列實現棧(Java版)

/**
/**
 * 用單鏈表實現棧
 * 
 * 表示連結串列的一個節點
 * @author ly
 *
 */
public class Node {
	
	Object element;
	Node next;
	
	public Node(Object element){
		this(element,null);
	}
	
	/**
	 * 建立一個新的節點
	 * 讓他的next指向,引數中的節點
	 * @param element
	 * @param n
	 */
	public Node(Object element,Node n){
		this.element=element;
		next=n;
	}
	
	public Object getElement() {
		return element;
	}
	
}

/**
 * 用連結串列實現的棧,內含push pop peak 方法
 * @author ly
 *
 */
public class ListStack {
	
	Node header;//棧頂元素
	int elementCount;//棧內元素個數
	int size;//棧的大小
	
	/**
	 * 建構函式,構造一個空的棧
	 */
	public ListStack(){
		header=null;
		elementCount=0;
		size=0;
	}
	
	/**
	 * 通過構造器自定義棧的大小
	 * @param size
	 */
	public ListStack(int size) {
		header=null;
		elementCount=0;
		this.size=size;
	}
	
	public void setHeader(Node header) {
		this.header=header;
	}
	
	public boolean isFull() {
		if (elementCount==size) {
			return true;
		}
		
		return false;
	}
	
	public boolean isEmpty() {
		if (elementCount==0) {
			return true;
		}
		
		return false;
	}
	
	/**
	 * 入棧
	 * @param value
	 */
	public void push(Object value) {
		if (this.isFull()) {
			throw new RuntimeException("Stack is Full");
		}
		//注意這裡面試將原來的header作為引數傳入,然後以新new出來的Node作為header
		header=new Node(value, header);
		elementCount++;
	}
	
	/**
	 * 出棧
	 * @return
	 */
	public Object pop() {
		if (this.isEmpty()) {
			throw new RuntimeException("Stack is empty");
		}
		Object object=header.getElement();
		
		header=header.next;
		
		elementCount--;
		
		return object;
	}
	
	/**
	 * 返回棧頂元素
	 */
	public Object peak(){
		
		if (this.isEmpty()) {
			throw new RuntimeException("Stack is empty");
		}
		
		return header.getElement();
	}

}

三、參考