/**
* @Description 實現一個簡單的棧結構,(先進後出)
* 包括壓棧操作、彈出棧、查找棧頂的數據、判斷棧是否爲空
* @auther Eleven
* @create 2020-04-02 23:04
**/
public class MyStack {
int[] elements;
public MyStack() {
//初始化的時候設置原始數組長度爲0 防止空指針異常
this.elements = new int[0];
}
//壓棧操作
public void push(int element){
//創建一個新數組用於接受需要壓入的數據和原先的數組 新數組的長度爲原先數組長度加+1
int[] newArr=new int[elements.length+1];
//將原先數組遍歷,並且賦值給到新的數組
for (int i=0;i<elements.length;i++){
newArr[i]=elements[i];
}
//將需要壓入的數據賦值給到新數組的最後一個索引位置
newArr[elements.length] =element;
//將原先數組的指針指向新的數組
elements = newArr;
}
//彈出棧操作(因爲棧是先進後出,所以最先彈出的應該是最後一個索引的數據,彈出棧的數據要被刪除)
public int pop(){
//首先需要判斷當前棧中是否有數據
if(elements.length==0){
//無數據就拋出異常
throw new RuntimeException("The Stack is empty");
}
//獲取棧頂元素
int elemet = elements[elements.length-1];
//創建一個新的數組用於操作數據,將除了最後一個元素之外的其他元素全部放入新的數組中
int[] newArr = new int[elements.length-1];
for (int i=0;i<elements.length-1;i++){
newArr[i] = elements[i];
}
//將原先數組的指針指向新的數組
elements = newArr;
//返回棧頂元素
return elemet;
}
//查找棧頂數據
public int peek(){
//首先需要判斷當前棧中是否有數據
if(elements.length==0){
//無數據就拋出異常
throw new RuntimeException("The Stack is empty");
}
//獲取棧頂元素
int elemet = elements[elements.length-1];
return elemet;
}
//判斷棧是否爲空
public boolean isEmpty(){
return elements.length == 0;
}
}
測試類
class Test{
public static void main(String[] args) {
MyStack myStack = new MyStack();
myStack.push(100);
myStack.push(98);
myStack.push(99);
System.out.println("my Stack :"+ Arrays.toString(myStack.elements));
myStack.pop();
myStack.pop();
myStack.pop();
System.out.println("my Stack :"+ Arrays.toString(myStack.elements));
System.out.println("my Stack 的棧頂元素爲 :"+ myStack.peek());
}
}