【备注】2026年3月19日开始学习,参考B站视频学习。

栈的介绍

  1. 栈的英文为stack

  2. 栈是一个先入后出FILO-First In Last Out)的有序列表。类似弹夹里面的子弹。

  3. 栈(stack)是限制线性表中元素的插入和修改的一种特殊线性表。只能在线性表的同一端进行插入和删除,可以变化的一端称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。

  4. 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶;而删除元素恰好相反,最后放入的元素最先删除,最先放入的元素最后删除。

  5. 入栈(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对象 ,即创建一个栈
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; //top表示栈顶

//构造器
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]);
}
}
}