队列(Queue)
-
操作原则:先进先出(FIFO,First In First Out)。
- 元素从队列尾部插入(enqueue),从队列头部移除(dequeue)。
-
基本操作:
- Enqueue:将元素加入队列尾部。
- Dequeue:将队列头部元素移除。
- Front/Peek:获取队列头部元素但不移除。
-
应用场景:
- 任务调度(如操作系统的进程调度)。
- 宽度优先搜索(BFS)算法。
- 缓冲区(如打印队列、消息队列)。
-
示例:
#include <stdio.h>
#include <stdlib.h>
#define MAX 100 // 队列的最大容量
typedef struct Queue {
int data[MAX];
int front;
int rear;
} Queue;
// 初始化队列
void initQueue(Queue *queue) {
queue->front = 0;
queue->rear = 0;
}
// 检查队列是否为空
int isEmpty(Queue *queue) {
return queue->front == queue->rear;
}
// 检查队列是否满
int isFull(Queue *queue) {
return (queue->rear + 1) % MAX == queue->front;
}
// 入队
void enqueue(Queue *queue, int value) {
if (isFull(queue)) {
printf("Queue is full\n");
return;
}
queue->data[queue->rear] = value;
queue->rear = (queue->rear + 1) % MAX;
}
// 出队
int dequeue(Queue *queue) {
if (isEmpty(queue)) {
printf("Queue is empty\n");
exit(1);
}
int value = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX;
return value;
}
// 查看队列头元素
int front(Queue *queue) {
if (isEmpty(queue)) {
printf("Queue is empty\n");
exit(1);
}
return queue->data[queue->front];
}
int main() {
Queue queue;
initQueue(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
printf("Front element: %d\n", front(&queue));
printf("Dequeued element: %d\n", dequeue(&queue));
printf("Dequeued element: %d\n", dequeue(&queue));
printf("Dequeued element: %d\n", dequeue(&queue));
return 0;
}
运行结果如下: