在 Java 中,棧和隊列是兩種重要的數(shù)據(jù)結(jié)構(gòu),它們在構(gòu)建程序邏輯時起著關鍵作用。以下是對這兩種數(shù)據(jù)結(jié)構(gòu)的詳細介紹:
### 棧 (Stack)
- **定義**:棧是一種后進先出(LIFO, Last In First Out)的數(shù)據(jù)結(jié)構(gòu)。元素只能從棧頂插入和刪除。
- **常用操作**:
- `push`:將元素壓入棧頂。
- `pop`:從棧頂彈出元素。
- `peek`:查看棧頂元素但不彈出。
- **應用場景**:
- **函數(shù)調(diào)用棧**:用于管理函數(shù)調(diào)用和返回。
- **表達式求值**:用于中綴表達式轉(zhuǎn)后綴表達式和計算后綴表達式的值。
- **括號匹配**:用于檢查括號是否成對匹配。
示例代碼:
```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)的數(shù)據(jù)結(jié)構(gòu)。元素只能從隊尾插入,從隊首刪除。
- **常用操作**:
- `offer`:將元素插入隊尾。
- `poll`:從隊首刪除元素。
- `peek`:查看隊首元素但不刪除。
- **應用場景**:
- **任務調(diào)度**:用于管理任務的執(zhí)行順序。
- **廣度優(yōu)先搜索**:用于圖的廣度優(yōu)先搜索算法。
- **緩沖區(qū)**:用于數(shù)據(jù)流的緩沖區(qū)管理。
示例代碼:
```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());
}
}
```
總結(jié)
- **棧**:后進先出,適用于函數(shù)調(diào)用管理、表達式求值和括號匹配等場景。
- **隊列**:先進先出,適用于任務調(diào)度、廣度優(yōu)先搜索和緩沖區(qū)管理等場景。