Java 栈与队列原理及手写实现
栈的核心概念
栈(Stack)是一种线性数据结构,核心特性是后进先出(LIFO)。想象一下子弹夹:最后装进去的子弹最先发射。栈底是最早放入的元素,栈顶则是最新进入的数据。
在实际应用中,栈常用于内存分配、表达式求值以及方法调用链的管理。理解栈的关键在于把握'栈顶'这一操作点的所有进出逻辑。

数组模拟栈的实现
用数组实现栈非常直观,我们只需要一个指针 top 来标记当前栈顶位置。初始时 top 设为 -1,表示空栈。
主要操作包括:
- push:入栈,元素放入
top+1位置。 - pop:出栈,返回
top位置元素并将top减一。 - peek:查看栈顶但不移除。
- size / empty / full:辅助状态检查。
这里有个细节需要注意,当数组满了需要扩容。通常采用倍增策略,即容量翻倍,这样均摊时间复杂度更优。
import java.util.Arrays;
public class MyStack {
private int[] elem;
private int top; // 栈顶索引,也代表当前元素数量
private static final int DEFAULT_CAPACITY = 10;
public MyStack() {
elem = new int[DEFAULT_CAPACITY];
top = -1;
}
public void push(int item) {
if (full()) {
// 容量不足时扩容,通常是原来的两倍
elem = Arrays.copyOf(elem, 2 * elem.length);
}
elem[++top] = item;
}
RuntimeException {
(empty()) {
();
}
elem[top--];
}
{
(empty()) {
();
}
elem[top];
}
{
top + ;
}
{
top == -;
}
{
top == elem.length - ;
}
}



