1. 程式人生 > >JAVA基礎(65)---棧

JAVA基礎(65)---棧

定義:只能在表的一端(棧頂)進行插入和刪除運算的線性表

邏輯結構:與線性表相同,仍為一對一關係

儲存結構:用順序棧或鏈棧儲存均可,但以順序棧更常見

運算規則:只能在棧頂運算,且訪問結點時依照後進先出(LIFO)或先進後出(FILO)的原則

實現方式:關鍵是編寫入棧和出棧函式,具體實現依順序棧或鏈棧的不同而不同

基本操作:入棧、出棧、讀棧頂元素值、建棧、判斷棧端、棧空等

棧的實現

package org.lanqiao.stack;

public interface IStack {
	/*
	 * 入棧
	 */
	public void push(Object obj);
	/*
	 * 出棧(刪除棧頂元素)
	 */
	public Object pop();
	/*
	 * 獲取棧頂元素(獲取值但不刪除棧頂元素)
	 */
	public Object getTop();
	/*
	 * 判斷棧是否已滿
	 */
	public boolean isMax();
	/*
	 * 判斷棧是否為空
	 */
	public boolean isEmpty();
	/*
	 * 遍歷棧
	 */
	public void print() ;
}
package org.lanqiao.stack;
/*
 * 採用順序棧來實現
 */
public class Stack  implements IStack{
	private Object[] stack;//棧的底層本質
	private int capacity =5;//棧的容量
	private int top = -1 ;//棧頂標記
	
	public  Stack() {
		stack = new Object[capacity];
	}
	public Stack(int capacity) {
		
		stack = new Object[capacity];
	}
	

	@Override
	public void push(Object obj) {
		if(isMax()) {
			System.out.println("棧已滿,入棧失敗。。。");
			return;
		}
		stack[++top] = obj;
	}

	@Override
	public Object pop() {
		if(isEmpty()) {
			System.out.println("棧為空,彈棧失敗...");
			return null;
		}
		return stack[top--];
	}

	@Override
	public Object getTop() {
		if(isEmpty()) {
			System.out.println("棧為空,獲取棧頂元素失敗...");
			return null;
		}
		return stack[top];
	}

	@Override
	public boolean isMax() {
		return top == (capacity -1);
	}

	@Override
	public boolean isEmpty() {
		return top == -1;
	}
	@Override
	public void print() {
		for(int i = 0 ; i <= top;i++) {
			
			System.out.println(stack[i]);
		}
		
	}

}
package org.lanqiao.stack;

public class StackTest {
	public static void main(String[] args) {
		Stack stack = new Stack();
		System.out.println(stack.isEmpty());
		stack.push("aa");
		stack.push("bbb");
		stack.push("cc");
		stack.push("dd");
		stack.push("eee");
		stack.push("ffff");
		stack.print();
		System.out.println("---------------");
		Object top = stack.getTop();
		System.out.println("棧頂元素:" + top);
		stack.pop();
		System.out.println("---------------");
		stack.print();
		System.out.println(stack.isMax());
		
	}
}