关于栈的一些理解

Posted xiaoboxueit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于栈的一些理解相关的知识,希望对你有一定的参考价值。

栈(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]);

        }

    }

 

}

 

以上是关于关于栈的一些理解的主要内容,如果未能解决你的问题,请参考以下文章

浅谈对JavaScript 中的执行上下文和执行栈的理解

关于既定技术栈的IE8浏览器兼容

关于面向对象设计的一些理解和思路

关于栈的析构问题

关于卷积的一些理解

20170926日关于需求调研的一些理解,