• 关于栈的一些理解


    栈(Stack):先入后出的有序列表

    栈的插入和删除只能在同一端进行,为变化的一端,叫做栈顶,另外一端叫做栈底。

    以下为栈的数组实现(Java JDK1.8)

    //数组实现栈

    public class stack {

        public static void main(String[] args) {

            //创建一个ArrayStack对象

            ArrayStack stack = new ArrayStack(4);

            String key = "";

            boolean loop = true;//控制是否退出菜单

            Scanner scanner = new Scanner(System.in);

            while(loop){

                System.out.println("show:表示显示栈");

                System.out.println("exit:表示退出");

                System.out.println("push:表示入栈");

                System.out.println("pop:表示弹栈");

                System.out.println("请输入你的选择");

                key = scanner.next();

                switch (key){

                    case "show":

                        stack.list();

                        break;

                    case "exit":

                        scanner.close();

                        loop = false;

                        break;

                    case "push":

                        System.out.println("请输入一个数字");

                        int value = scanner.nextInt();

                        stack.push(value);

                        break;

                    case "pop":

                        try {

                            int res = stack.pop();

                            System.out.println("出栈的数据"+res);

                        }catch (Exception e){

                            System.out.println(e.getMessage());

                        }

                        break;

                }

            }

            System.out.println("程序退出了-----------------------------------------");

        }

    }

    //定义一个表示栈的类

    class ArrayStack{

        private int maxSize;//定义栈的容量

        private int[] stack;//定义存储栈数据的数组

        private int top = -1;//定义栈顶,初始为-1

        //定义构造函数

        public ArrayStack(int maxSize){

            this.maxSize = maxSize;

            stack = new int[this.maxSize];//初始化数组

        }

        //判断栈是否满了

        public boolean isFull(){

            return top == maxSize - 1;//如果栈顶等于容量减一的时候,栈就满了

        }

        //判断栈是否空

        public boolean isEmpty(){

            return top == -1;

        }

        //入栈 push

        public void push(int value){

            //先判断栈是否满了,满了无法入栈

            if(isFull()){

                System.out.println("栈已满,无法入栈");

                return;

            }

            top++;

            stack[top] = value;//将新入栈的数据放入数组

        }

        //出栈 pop

        public int pop(){

            //先判断是否为空栈

            if(isEmpty()){

                //抛出异常

                throw new RuntimeException("栈已空");

            }

                int value = stack[top];//获取弹栈的值

                top--;

                return value;//返回弹栈的值

        }

        //显示栈的情况,遍历时需要从栈顶往下走

        public void list(){

            if(isEmpty()){ //判空

                System.out.println("栈空,无数据");

                return;

            }

            for(int i = top;i>=0;i--){

                System.out.printf("stack[%d]=%d ",i,stack[i]);

            }

        }

    }

  • 相关阅读:
    JSF
    filter用户例子
    分析LogFilter
    理解session
    了解xml文件
    软件工程期末项目总结
    阅《软件工程》——之感
    自我介绍
    期末课程设计《天猫后台管理系统》
    JSON
  • 原文地址:https://www.cnblogs.com/xiaoboxueit/p/13084186.html
Copyright © 2020-2023  润新知