在 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());
}
}
```
總結
- **棧**:后進先出,適用于函數調用管理、表達式求值和括號匹配等場景。
- **隊列**:先進先出,適用于任務調度、廣度優先搜索和緩沖區管理等場景。

