通过数组实现栈

简单实现

栈是先入后出的数据结构,我们通过数组来实现它。栈压入元素时,我们新建一个数组将元素存入到数组末尾的位置。栈取出元素时,我们获取数组最后位置的元素就可以了。

栈的实现代码

package com.wuxudong.test;

//通过数组实现栈
public class MyStack {

    //定义数组
    private int [] arr;

    //构造方法
    public MyStack(){
        arr=new int [0];
    }

    //压入元素
    public void push(int element){
        //创建一个长度比arr多1的数组
        int [] newArr=new int [arr.length+1];

        //循环遍历将原来的数组元素添加进去
        for (int i=0;i<arr.length;i++){
            newArr[i]=arr[i];
        }
        //将元素添加进去
        newArr[arr.length]=element;
        //将新数组的引用指向原来的引用
        arr=newArr;
    }

    //取出元素并删除
    public int pop(){
        //如果数组为空,则抛出异常
        if(arr.length==0){
            throw new RuntimeException("栈是空的");
        }
        int element=0;
        //新建一个数组,长度为原数组减1
        int [] newArr=new int [arr.length-1];

        for (int i=0;i<arr.length-1;i++){
            newArr[i]=arr[i];
        }
        element=arr[arr.length-1];
        //将新数组的引用
        arr=newArr;
        //返回栈顶元素
        return element;

    }

    //获取栈顶元素并不删除
    public int getElement(){
        if(arr.length==0){
            throw new RuntimeException("栈是空的");
        }
        return arr[arr.length-1];
    }

    //判断栈是否为空
    public boolean isEmpty(){
        return arr.length==0;
    }




}

栈的测试代码

package com.wuxudong.test;

public class TestMyStack {

    public static void main(String[] args) {

        MyStack myStack=new MyStack();
        //压入元素
        myStack.push(7);
        myStack.push(8);
        myStack.push(9);

        //取出元素
       /* System.out.println(myStack.pop());
        System.out.println(myStack.pop());
        System.out.println(myStack.pop());*/

        //获取元素
        System.out.println(myStack.getElement());
        myStack.pop();
        System.out.println(myStack.getElement());
        myStack.pop();
        System.out.println(myStack.getElement());

        //判断栈是否为空
        myStack.pop();
        System.out.println(myStack.isEmpty());
    }





}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值