1.概念:
一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的數據元素遵守后進先出LIFO(Last In First Out)的原則。
?壓棧:棧的插入操作叫做進棧/壓棧/入棧,入數據在棧頂。
出棧:棧的刪除操作叫做出棧。出數據在棧頂。
2.棧的方法:
?接下來就來一一模擬實現上述棧的方法↓
先把最基本的成員變量和構造方法完成
public class MyStack {public int[] elem;public int usedsize;public MyStack() {this.elem = new int[10];}
}
?實現push方法
public void push(int val){if(isFull()){this.elem = Arrays.copyOf(elem , elem.length * 2);}elem[usedsize++] = val;}private boolean isFull(){return usedsize == elem.length;}
實現pop方法
先自定義創建一個空棧異常類
public class EmptyStackException extends RuntimeException {public EmptyStackException() {}public EmptyStackException(String message) {super(message);}
}
pop方法?
public int pop(){if(isEmpty()){throw new EmptyStackException();}int val = elem[usedsize - 1];usedsize--;return val;}
private boolean isEmpty(){return usedsize == 0;}
實現peek方法?
public int peek(){if(isEmpty()){throw new EmptyStackException();}return elem[usedsize - 1];}private boolean isEmpty(){return usedsize == 0;}
測試:
public class Test {//測試MyStackpublic static void main1(String[] args) {MyStack myStack = new MyStack();myStack.push(1);myStack.push(2);myStack.push(3);myStack.push(4);myStack.push(5);System.out.println(myStack.peek());System.out.println(myStack.pop());System.out.println(myStack.peek());}
}
結果:
?