数组模拟栈
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
以上是关于数组模拟栈的主要内容,如果未能解决你的问题,请参考以下文章