簡單棧的陣列實現
阿新 • • 發佈:2018-12-23
package com.yy.stack; public class Stack { //陣列實現棧結構 private Object[] obj; //棧的長度 private int index; /** * 初始化長度為10的棧 */ public Stack() { obj = new Object[10]; } /** * 初始化長度為length的棧 * @param length */ public Stack(int length){ obj = new Object[length]; } /** * 進棧 */ public void push(Object o){ expandStack(); obj[index++] = o; } /** * 出棧 */ public void pop(){ //1.先判斷陣列是否為空 //2.出棧 if(isEmpty()){ System.out.println("棧為空"); }else{ Object[] temp = new Object[index--]; System.arraycopy(obj, 0, temp, 0, index); obj = temp; } } /** * 出棧並返回資料 * @return */ public Object getPop(){ Object o = null; if(isEmpty()){ System.out.println("棧為空"); }else{ o = getLast(); Object[] temp = new Object[index--]; System.arraycopy(obj, 0, temp, 0, index); obj = temp; } return o; } /** * 獲取棧的最後一位資料 * @return */ public Object getLast() { int length = index; return obj[--length]; } /** * 判斷是否為空棧 * @return */ public boolean isEmpty() { if(index == 0){ return true; } return false; } /** * * 判斷棧的容量並擴大 */ private void expandStack() { //判斷當前棧的長度是否滿了 if(index >= obj.length){ Object[] temp = new Object[obj.length * 2]; System.arraycopy(obj, 0, temp, 0, obj.length);//陣列拷貝 obj = temp; } } /** * 獲取棧的長度 * @return */ public int getSize(){ return index; } /** * 列印棧 */ public void printStack(){ for(int i = 0; i < index; i++){ System.out.println(obj[i]); } } public static void main(String[] args) { Stack s = new Stack(); int i = 1; int j = 2; s.push(i); s.push(j); System.out.println(s.getPop()); s.printStack(); } }