导言:栈和我们的现实当中的箱子是一样的,保持一个先进后出,后进先出的原则。比如我们往一个箱子堆积衣服,一件一件地放进去之后,过一段时间再回来拿。那么最先放进去的衣服肯定最后拿出来,最后放进去的衣服就会最先拿出来,或许可以类比于给老师提交作业,最先提交作业的同学老师总是最后批改。 因此在Java里面我们可以通过一个数组来模拟这个栈。
首先我们可以构建一个栈,然后在另外一个类当中对栈进行插入数据和移除数据的操作。
一.Mystack.java
/** * Created by lenovo on 2019/5/11. */ public class Mystack { //底层实现是一个数组 private long[] arr; private int top; //默认的构造方法 public Mystack() { arr=new long[10]; top=-1; } //带参数的构造方法,参数为数组的初始化大小 public Mystack(int maxsize) { arr=new long[maxsize]; top=-1; } //往栈里添加数据 public void push(int value) { arr[++top]=value; } //移除数据 public long pop() { return arr[top--]; } //查看数据 public long peek() { return arr[top]; } //判断是否为空 public boolean isEmpty() { return top == -1; } //判断是否满了 public boolean isFull() { return top==arr.length-1;//因为top是从0开始的 } }
然后我们在一个类当中对这个栈进行操作即可。
二.TestMyStack.java
/** * Created by lenovo on 2019/5/11. */ public class TestMyStack { public static void main(String[] args) { Mystack ms=new Mystack(4);//竟然要在主函数里面进行调用才会管用,太神奇了 ms.push(23); ms.push(12); ms.push(1); ms.push(90); System.out.println(ms.isEmpty()); System.out.println(ms.isFull()); System.out.println(ms.peek()); System.out.println(ms.peek()); while(!ms.isEmpty()) { System.out.println(ms.pop()+","); } System.out.println(ms.isEmpty()); System.out.println(ms.isFull()); }
最后的输出结果为:
false true 90 90 90, 1, 12, 23, true false
上面的代码很容易理解,我也就不多讲了。关键是要理解这种后进先出的数据结构是如何实现的。