1.7 栈使用数组模拟

  • 基本介绍

    • 栈是一个先入后出的有序列表,类似于子弹夹
    • 栈是限制线性元素表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表,允许插入和删除的一端,为变化的一端,为栈顶,另一端为固定的一端,为栈底
    • 栈中先放入的元素后删除,最后放入的元素先删除
    • 应用场景
      • java中子程序的调用,递归调用
      • 表达式的转换(逆波兰表达式),二叉树遍历,图的深度优先遍历
  • 代码实现(使用数组模拟)

  • public class ArrayStackDemo {
       public static void main(String[] args) {
           ArrayStack arrayStack = new ArrayStack(6);
           char key;
           Scanner scanner = new Scanner(System.in);
           a:while (true) {
               try {
                   System.out.println("q:退出程序");
                   System.out.println("s:查看栈");
                   System.out.println("a:向栈中加值");
                   System.out.println("g:从栈中取值");
                   key = scanner.next().charAt(0);
                   switch (key) {
                       case 's':
                           arrayStack.show();
                           break;
                       case 'a':
                           System.out.println("输入一个值:");
                           arrayStack.push(scanner.nextInt());
                           break;
                       case 'g':
                           try {
                               System.out.println("从栈中取出的值为" + arrayStack.pop());
                           } catch (Exception e) {
                               System.out.println(e.getMessage());
                           }
                           break;
                       case 'q':
                           scanner.close();
                           System.out.println("退出程序");
                           break a;
                       default:
                           System.out.println("命令错误");
                   }
               } catch (Exception e) {
                   System.out.println(e.getMessage());
               }
           }
       }
    }
    // 数组模拟栈
    class ArrayStack{
       private int maxSize; // 栈大小
       private int[] stack; // 存储栈中元素
       private int top = -1; // 栈顶的指针 默认-1为空
    
       public ArrayStack(int maxSize) {
           this.maxSize = maxSize;
           stack = new int[this.maxSize];
       }
    
       // 判断栈空
       public boolean isEmpty() {
           return -1 == top;
       }
    
       // 判断栈满
       public boolean isFull() {
           return top == maxSize-1;
       }
    
       // 向栈中加入元素
       public void push(int value) {
           if (isFull()) {
               System.out.println("栈满");
               return;
           }
           stack[++top] = value;
       }
    
       // 在栈中取元素
       public int pop() {
           if (isEmpty()) {
               throw new RuntimeException("栈空");
           }
           return stack[top--];
       }
    
       // 显示栈中元素 需要从栈顶显示
       public void show() {
           for (int i = top; i >= 0; i--) {
               System.out.printf("[%d]=%d\n",i,stack[i]);
           }
       }
    }
    

相关文章

背景:计算机内部用补码表示二进制数。符号位1表示负数,0表...
大家好,我们现在来讲解关于加密方面的知识,说到加密我认为不...
相信大家在大学的《算法与数据结构》里面都学过快速排序(Qui...
加密在编程中的应用的是非常广泛的,尤其是在各种网络协议之...
前言我的目标是写一个非常详细的关于diff的干货,所以本文有...
对称加密算法 所有的对称加密都有一个共同的特点:加密和...