【备注】2026年3月19日开始学习,参考B站视频学习。
栈
栈的介绍
栈的英文为stack
栈是一个先入后出(FILO-First In Last Out)的有序列表。类似弹夹里面的子弹。
栈(stack)是限制线性表中元素的插入和修改的一种特殊线性表。只能在线性表的同一端进行插入和删除,可以变化的一端称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。
根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶;而删除元素恰好相反,最后放入的元素最先删除,最先放入的元素最后删除。
入栈(push)和出栈(pop)示意图

入栈示意图

出栈示意图
代码实现
数组模拟栈的使用

数组模拟栈的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| import java.util.Scanner; public class ArrayStack { public static void main(String[] args){ ArrStack stack = new ArrStack(4); String key = ""; boolean loop = true; Scanner scanner = new Scanner(System.in);
while (loop) { System.out.println("show:表示显示栈"); System.out.println("exit:表示退出程序"); System.out.println("push:表示添加数据到栈"); System.out.println("pop:表示数据出栈"); System.out.println("请输入你的选择:"); key = scanner.next(); switch (key) { case "show": stack.list(); break; case "exit": loop = false; scanner.close(); break; case "push": int value = scanner.nextInt(); stack.push(value); break; case "pop": stack.pop(); break; default: break; } } System.out.println("程序退出了");
} }
class ArrStack{ private int maxSize; private int[] stack; private int top = -1;
public ArrStack(int maxSize){ this.maxSize = maxSize; stack = new int[this.maxSize]; }
public boolean isFull(){ return top== maxSize -1; }
public boolean isEmpty(){ return top == -1 ; }
public void push(int value){ if(isFull()){ System.out.println("栈满"); return; } top++; stack[top] = value; }
public int pop(){ if(isEmpty()){ throw new RuntimeException("栈空,无法取出数据"); } int value = stack[top]; top--; return value;
}
public void list(){ if(isEmpty()){ System.out.println("栈空,无法遍历!"); return; } for(int i=top; i>=0 ; i--){ System.out.println("Stack["+i+"] = "+stack[i]); } } }
|