JAVA基礎(65)---棧
阿新 • • 發佈:2018-11-20
棧
定義:只能在表的一端(棧頂)進行插入和刪除運算的線性表
邏輯結構:與線性表相同,仍為一對一關係
儲存結構:用順序棧或鏈棧儲存均可,但以順序棧更常見
運算規則:只能在棧頂運算,且訪問結點時依照後進先出(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()); } }