Java数据结构(一):栈

时间:2019-05-11 16:35:00 来源:互联网 作者: 神秘的大神 字体:

导言:栈和我们的现实当中的箱子是一样的,保持一个先进后出,后进先出的原则。比如我们往一个箱子堆积衣服,一件一件地放进去之后,过一段时间再回来拿。那么最先放进去的衣服肯定最后拿出来,最后放进去的衣服就会最先拿出来,或许可以类比于给老师提交作业,最先提交作业的同学老师总是最后批改。 因此在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

上面的代码很容易理解,我也就不多讲了。关键是要理解这种后进先出的数据结构是如何实现的。