用連結串列實現棧(Java版)
阿新 • • 發佈:2019-01-22
/** /** * 用單鏈表實現棧 * * 表示連結串列的一個節點 * @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(); } }