zcq

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