数组模拟栈

Posted niujifei

tags:

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

数组模拟栈

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

  2、实现思路分析,并画出示意图。

    技术图片

 

  3、代码实现

  1 public class ArrayStackDemo 
  2 
  3     public static void main(String[] args) 
  4         // 测试栈
  5         ArrayStack stack = new ArrayStack(4);
  6         String key = "";
  7         boolean loop = true; // 是否退出菜单
  8         Scanner sc = new Scanner(System.in);
  9 
 10         while (loop) 
 11             System.out.println("show:表示显示栈");
 12             System.out.println("exit:退出程序");
 13             System.out.println("push:表示添加数据到栈(入栈)");
 14             System.out.println("pop:表示从栈取出数据(出栈)");
 15             System.out.println("请输入你的选择");
 16             key = sc.next();
 17             switch (key) 
 18             case "show":
 19                 stack.list();
 20                 break;
 21             case "push":
 22                 System.out.println("请输入一个数据");
 23                 int value = sc.nextInt();
 24                 stack.push(value);
 25                 break;
 26             case "pop":
 27                 try 
 28                     int res = stack.pop();
 29                     System.out.printf("出栈的数据是%d\\n", res);
 30                  catch (Exception e) 
 31                     System.out.println(e.getMessage());
 32                 
 33                 break;
 34             case "exit":
 35                 sc.close();
 36                 loop = false;
 37                 break;
 38             default:
 39                 break;
 40             
 41         
 42 
 43         System.out.println("程序退出!");
 44     
 45 
 46 
 47 
 48 // 定义一个ArrayStack 表示栈
 49 class ArrayStack 
 50     private int maxSize; // 栈的大小
 51     private int[] stack; // 数组,数组模拟栈,数据就在该数组
 52     private int top = -1; // top 表示栈顶,初始化为 -1
 53 
 54     // 构造器
 55     public ArrayStack(int maxSize) 
 56         this.maxSize = maxSize;
 57         stack = new int[this.maxSize];
 58     
 59 
 60     // 判断栈满
 61     public boolean isFull() 
 62         return top == maxSize - 1;
 63     
 64 
 65     // 判断栈空
 66     public boolean isEmpty() 
 67         return top == -1;
 68     
 69 
 70     // 入栈 - push
 71     public void push(int value) 
 72         // 先判断栈是否满
 73         if (isFull()) 
 74             System.out.println("栈满");
 75             return;
 76         
 77         top++;
 78 
 79         stack[top] = value;
 80 
 81     
 82 
 83     // 出栈 - pop,将栈顶的数据返回
 84     public int pop() 
 85         // 先判断栈是否空
 86         if (isEmpty()) 
 87             // 抛出异常来处理
 88             throw new RuntimeException("栈空,没有数据··");
 89         
 90 
 91         int value = stack[top];
 92         top--;
 93         return value;
 94     
 95 
 96     // 显示栈的情况[遍历栈],从栈顶往下显示数据
 97     public void list() 
 98         if (isEmpty()) 
 99             System.out.println("栈空,没有数据~~");
100             return;
101         
102 
103         for (int i = top; i >= 0; i--) 
104             System.out.printf("stack[%d]=%d\\n", i, stack[i]);
105         
106     
107 
108 

 

以上是关于数组模拟栈的主要内容,如果未能解决你的问题,请参考以下文章

一维数组模拟数据结构-------栈

用数组模拟栈 队列 以及单调栈 单调队列应用

用数组模拟栈 队列 以及单调栈 单调队列应用

数组和链表的区别ArrayList和LinkedList的区别使用LinkedList模拟栈和队列

在Javascript中模拟栈操作和队列操作

:栈 -- 栈的介绍实现方式(链表数组)应用场景快速入门(使用数组模拟栈的使用回文数)栈实现计算器