首页 > 编程语言 > 详细

数组模拟栈详解

时间:2021-05-08 00:08:22      阅读:24      评论:0      收藏:0      [点我收藏+]

数组模拟栈详解

说明

  1. 栈基于先进后出的特性,在递归,子程序的调用,深度优先算法,二叉树的遍历等方面起着重要的作用
  2. 栈可以基于基本数据类型数组实现,也可以使用链表实现
  3. 栈的常用方法为入栈和出栈,即push()和pop()
  4. 以下详细介绍用数组模拟栈的情况

源码及分析

栈类
//定义一个类表示栈
class ArrayStack {
    //top表示栈顶的位置,默认为-1,表示栈空
    private int top = -1;
    //maxSize表示栈能存储元素的最大值
    private int maxSize;
    //stack表示用数组模拟栈
    private int[] stack;

    //构造器
    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;
    }

    //向栈中添加元素的方法
    public void push(int value) {
        //判断栈是否满
        if (isFull()) {
            System.out.println("栈满,不能添加数据~~");
            return;
        }
        //如果栈不是满的,则栈顶++,将要添加的元素放到栈顶
        top++;
        stack[top] = value;
    }

    //从栈中取出元素的方法
    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\n",i,stack[i]);
        }
    }


}
测试类
public static void main(String[] args) {
        //测试栈
        ArrayStack stack = new ArrayStack(10);
        //接收输入的信息
        String key = "";
        //控制菜单结束
        boolean loop = true;
        //扫描器
        Scanner scanner = new Scanner(System.in);

        while (loop){
            System.out.println("========欢迎来到栈测试系统========");
            System.out.println("========list表示显示栈中元素========");
            System.out.println("========push表示向栈中添加元素========");
            System.out.println("========pop表示取出栈中元素========");
            System.out.println("========exit表示退出栈========");
            System.out.println("请输入你的选择:");
            key = scanner.next();
            switch (key){
                case "list":
                    stack.list();
                    break;
                case "push":
                    System.out.println("请输入你要添加的元素:");
                    int value = scanner.nextInt();
                    stack.push(value);
                    System.out.println("元素添加成功~~");
                    break;
                case "pop":
                    try{
                        value = stack.pop();
                        System.out.println("取出的元素是 " + value);
                    }catch (Exception e){
                        System.out.println(e.getMessage());
                    }
                    break;
                case "exit":
                    loop = false;
                    break;
            }
        }
        System.out.println("程序退出~~");
    }
}

数组模拟栈详解

原文:https://www.cnblogs.com/mx-info/p/14742667.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!