用数组实现出栈,入栈和查看栈顶元素

栈的出入规则呢是先进后出,后进先出。就像我们往箱子里面放东西一样,先放进去的在下面,后面放进去的在上面,只有把后面放进去的先拿出来,。我们才能取到我们最开始放进去的东西

下面我们就用数组实现一下栈的push,pop和peek方法,因为是一次写的,就不一个个测试了,直接上所有的吧

package stack;

import java.util.Arrays;

/**
 * Created by xiaobai on 2019/1/10.
 */
public class MyStack {


//    用数组的方式实现栈的底层
    int[] elements ;

    public MyStack(){
        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("stack is empty");
        }
        //获取栈顶元素
        int element = 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 element;
    }

    //查看栈顶元素
    public int peek(){
        //判断栈不是空栈
        if (elements.length == 0){
            throw new RuntimeException("stack is empty");
        }
        return elements[elements.length - 1];
    }

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

    //查看栈内元素
    public void show(){
        System.out.println(Arrays.toString(elements));
    }
}

下来我们写个main方法测试一下

package TestArrayDemo;

import stack.MyStack;

import java.util.Arrays;

/**
 * Created by xiaobai on 2019/1/10.
 */
public class JavaStackTest {

    public static void main(String[] args) {
        MyStack stack = new MyStack();

        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);
        stack.push(6);

        //查看栈内元素
        stack.show();
        //拿出栈顶元素
        System.out.println(stack.pop());
        //查看栈内元素
        stack.show();
        //查看栈顶元素
        System.out.println(stack.peek());

        System.out.println(stack.isEmpty());
    }
}

好了,我们可以下看一下控制台的输出

[1, 2, 3, 4, 5, 6]
6
[1, 2, 3, 4, 5]
5
false

Process finished with exit code 0

关于栈的就写到这里了,大家互勉啊。有什么问题我们可以互相讨论哈

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值