zoukankan      html  css  js  c++  java
  • 数组模拟栈(Stack)

    栈的介绍

      1.栈是一个先进后出(FILO-First In Last Out)的有序列表

      2.栈(Stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端为变化的一端,我们称之为栈顶(top),另一端为固定的一端,我们称之为栈底(Bottom)。

      3.根据栈的定义可知,最先放入栈中的元素在栈底,最后放入的元素在栈顶,而删除元素正好先反,最后放入的元素最先删除,最先放入的元素最后删除。

      4.图示:

     栈的举例

      1.用数组模拟栈的使用,由于栈是一种有序列表,可以使用数组的结构来存储栈的数据内容。

      2.示意图即思路分析

    思路分析:

      使用数组来模拟栈,定义一个top来表示栈顶,初始化为-1

      入栈操作:当有数据加入到栈是,top++;stack[top]=value;

      出栈操作:int value=stack[top]; top--;return value;

    源代码

    package com.atxihua;
    
    import java.util.Scanner;
    
    public class ArrayStackDemo {
        public static void main(String[] args) {
            //测试
            //先创建一个ArrayStack对象表示栈
            ArrayStack stack=new ArrayStack(4);
            String key="";
            boolean loop=true;//控制是否退出菜单
            Scanner scanner=new Scanner(System.in);
            System.out.println("show:表示显示栈");
            System.out.println("exit:退出程序");
            System.out.println("push:表示添加数据到栈(入栈)");
            System.out.println("pop:表示从栈中取出数据(出栈)");
            System.out.println("请输入你的选择");
            while (loop){
                key=scanner.next();
                switch (key){
                    case "show":
                        stack.list();
                        break;
                    case "push":
                        System.out.println("请输入一个整数");
                        int value=scanner.nextInt();
                        stack.push(value);
                        break;
                    case "pop":
                        int res=stack.pop();
                        System.out.println("出栈的数据是:"+res);
                        break;
                    case "exit":
                        scanner.close();
                        loop=false;
                        break;
                }
            }
    
        }
    }
    //定义一个ArrayStack表示栈
    class ArrayStack{
        private int maxSize;//栈的大小
        private int[] stack;//数组,数组模拟栈,数据放在该数组中
        private int top=-1;//top表示栈顶,初始化为-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.println(stack[i]);
            }
        }
    }

    运行结果

     如此,就简单的用数组模拟了栈的实现。

          

          

  • 相关阅读:
    为啥负利率国债有人抢着买?因为时代变了
    微增长时代
    U盘插入电脑后图标是灰色的,打开提示“请将磁盘插入驱动器”
    计算shell 脚本的执行时间
    win10系统应用商店打开后无法联网 代码: 0x80131500 的解决办法
    Jetbrains家的软件都可用的激活码-pycharm
    postman中x-www-form-urlencoded与form-data的区别
    升级Gogs版本
    上海对售价超1499元的茅台酒即没收并另处罚款
    提高收入的根本途径
  • 原文地址:https://www.cnblogs.com/ftx3q/p/15711685.html
Copyright © 2011-2022 走看看