一、栈的基本概念
栈是一种重要的线性数据结构,遵循后进先出(LIFO, Last In First Out)原则。下面详细介绍Java中栈的实现和使用方法。
1. 栈的特性
-
后进先出:最后入栈的元素最先出栈
-
基本操作:
-
push:元素入栈 -
pop:元素出栈 -
peek:查看栈顶元素但不移除
-
-
限制访问:只能访问栈顶元素
2. 常见应用场景
-
函数调用栈
-
表达式求值
-
括号匹配检查
-
浏览器前进/后退功能
-
撤销(Undo)操作
二、Java中的Stack类
Java提供了java.util.Stack类实现栈结构:
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
// 入栈操作
stack.push(1);
stack.push(2);
stack.push(3);
// 查看栈顶元素
System.out.println("栈顶元素: " + stack.peek()); // 输出3
// 出栈操作
System.out.println("出栈: " + stack.pop()); // 输出3
System.out.println("出栈: " + stack.pop()); // 输出2
// 判断栈是否为空
System.out.println("栈是否为空: " + stack.isEmpty()); // 输出false
// 获取栈大小
System.out.println("栈大小: " + stack.size()); // 输出1
}
}
三、使用Deque实现栈(推荐方式)
(博哥有话说:在使用上没有什么太大的区别,在定义的时候有区别,这个的祖宗类更加强大稳定)
由于Stack类继承自Vector,Java官方推荐使用Deque接口的实现类:
import java.util.ArrayDeque;
import java.util.Deque;
public class Main {
public static void main(String[] args) {
Deque<Integer> stack = new ArrayDeque<>();
// 入栈操作
stack.push(1);
stack.push(2);
stack.push(3);
// 查看栈顶元素
System.out.println("栈顶元素: " + stack.peek()); // 输出3
// 出栈操作
System.out.println("出栈: " + stack.pop()); // 输出3
System.out.println("出栈: " + stack.pop()); // 输出2
// 判断栈是否为空
System.out.println("栈是否为空: " + stack.isEmpty()); // 输出false
// 获取栈大小
System.out.println("栈大小: " + stack.size()); // 输出1
}
}
四、自定义栈实现
基于数组的实现
public class ArrayStack {
private int maxSize;
private int[] stack;
private int top = -1;
public ArrayStack(int size) {
this.maxSize = size;
stack = new int[maxSize];
}
// 判断栈满
public boolean isFull() {
return top == maxSize - 1;
}
// 判断栈空
public boolean isEmpty() {
return top == -1;
}
// 入栈
public void push(int value) {
if (isFull()) {
throw new RuntimeException("栈已满");
}
stack[++top] = value;
}
// 出栈
public int pop() {
if (isEmpty()) {
throw new RuntimeException("栈为空");
}
return stack[top--];
}
// 查看栈顶
public int peek() {
if (isEmpty()) {
throw new RuntimeException("栈为空");
}
return stack[top];
}
// 显示栈内容
public void display() {
if (isEmpty()) {
System.out.println("栈为空");
return;
}
for (int i = top; i >= 0; i--) {
System.out.printf("stack[%d]=%d\n", i, stack[i]);
}
}
}

被折叠的 条评论
为什么被折叠?



