在 Java 中,栈和队列是两种重要的数据结构,它们在构建程序逻辑时起着关键作用。以下是对这两种数据结构的详细介绍:
### 栈 (Stack)
- **定义**:栈是一种后进先出(LIFO, Last In First Out)的数据结构。元素只能从栈顶插入和删除。
- **常用操作**:
- `push`:将元素压入栈顶。
- `pop`:从栈顶弹出元素。
- `peek`:查看栈顶元素但不弹出。
- **应用场景**:
- **函数调用栈**:用于管理函数调用和返回。
- **表达式求值**:用于中缀表达式转后缀表达式和计算后缀表达式的值。
- **括号匹配**:用于检查括号是否成对匹配。
示例代码:
```java
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println("Stack: " + stack);
System.out.println("Popped element: " + stack.pop());
System.out.println("Top element: " + stack.peek());
}
}
```
### 队列 (Queue)
- **定义**:队列是一种先进先出(FIFO, First In First Out)的数据结构。元素只能从队尾插入,从队首删除。
- **常用操作**:
- `offer`:将元素插入队尾。
- `poll`:从队首删除元素。
- `peek`:查看队首元素但不删除。
- **应用场景**:
- **任务调度**:用于管理任务的执行顺序。
- **广度优先搜索**:用于图的广度优先搜索算法。
- **缓冲区**:用于数据流的缓冲区管理。
示例代码:
```java
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
Queue
queue.offer(1);
queue.offer(2);
queue.offer(3);
System.out.println("Queue: " + queue);
System.out.println("Polled element: " + queue.poll());
System.out.println("Front element: " + queue.peek());
}
}
```
总结
- **栈**:后进先出,适用于函数调用管理、表达式求值和括号匹配等场景。
- **队列**:先进先出,适用于任务调度、广度优先搜索和缓冲区管理等场景。