简单的栈结构

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章