/**
* @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());
}
}