zoukankan      html  css  js  c++  java
  • Java数据结构(一):栈

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

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

  • 相关阅读:
    JS 中深拷贝的几种实现方法
    实现一个函数clone,可以对JS中的5种数据类型(Number、String、Object、Array、Boolean)进行值复制
    etTimeout来实现setInterval
    原型链
    Vue.js面试题整理
    JS中的闭包
    JavaScript的数据类型
    MyBatis-Plus使用(1)-概述+代码生成器
    JDK8的Optional用法
    动态修改HttpServletRequest的Post请求参数
  • 原文地址:https://www.cnblogs.com/geeksongs/p/10849125.html
Copyright © 2011-2022 走看看