What is Stack、Queue?
- 栈(Stack)又名堆栈;
- 队列(Queue);
堆栈的特点:
由于堆栈的栈和蘸碟的蘸同音,可以想象去火锅店吃饭,调味台上有一摞蘸碟,你是不是只能从顶上的蘸碟拿起,这就是堆栈的特点:后进先出。
队列的特点:
队列就是类似排队的数据结构,比如排队打饭,先排队的先打到饭(非常的直观)。所以队列的特点:先进先出。
两者的一些相同点
- 都是抽象的数据结构,它只是规定了需要的操作,底层使用什么基础结构实现,它不管。使用数组、集合...去实现都无所谓,只要实现它的特点就行;
- 通常用来存储一些临时数据,这些临时的数据进了这个结构后,就必须要按照这个“先进先出”or“后进先出”的特点去读取;
应用场景
栈:
- 撤回操作
- 语法检查器
队列
- 一些类似排队的场景
- 处理异步请求
栈的实践
使用java 语言实现一个简单的栈,可以存储Int类型的数据,
public class IntegerStack {
private int maxSize;
private int top;
private int[] stackArray;
public IntegerStack(int size) {
maxSize = size;
stackArray = new int[maxSize];
top = -1;
}
// 向栈中添加一个整数
public void push(int value) {
if (top < maxSize - 1) {
top++;
stackArray[top] = value;
} else {
System.out.println("栈已满。无法添加" + value);
}
}
// 从栈中删除并返回顶部整数
public int pop() {
if (!isEmpty()) {
int poppedValue = stackArray[top];
top--;
return poppedValue;
} else {
System.out.println("栈为空。");
return -1;
}
}
// 从栈中获取但不删除顶部整数
public int peek() {
if (!isEmpty()) {
return stackArray[top];
} else {
System.out.println("栈为空。");
return -1;
}
}
// 检查栈是否为空
public boolean isEmpty() {
return (top == -1);
}
}
test
public class IntegerStackTest extends TestCase {
public void testPush() {
IntegerStack myStack = new IntegerStack(5);
myStack.push(10);
myStack.push(20);
myStack.push(30);
myStack.push(40);
myStack.push(50);
System.out.println("在栈顶处打印: " + myStack.peek()); // 输出:在栈顶处打印: 50
while (!myStack.isEmpty()) {
System.out.print(myStack.pop() + " "); // 输出:50 40 30 20 10
}
System.out.println(" ");
myStack.push(60);
myStack.push(70);
while (!myStack.isEmpty()) {
System.out.print(myStack.pop() + " "); // 输出:70 60
}
}
}
out
在栈顶处打印: 50
50 40 30 20 10
70 60