数组模拟栈

  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 }

 

posted on 2019-09-26 11:03  格物致知_Tony  阅读(652)  评论(0编辑  收藏  举报