#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// 队列结构体
typedef struct {
int *elements; // 存储元素的数组
int front; // 队首指针
int rear; // 队尾指针(指向下一个插入位置)
int capacity; // 队列容量
int size; // 当前元素数量
} Queue;
// 初始化队列
Queue* createQueue(int capacity) {
Queue *queue = (Queue*)malloc(sizeof(Queue));
queue->elements = (int*)malloc(capacity * sizeof(int));
queue->front = 0;
queue->rear = 0;
queue->size = 0;
queue->capacity = capacity;
return queue;
}
// 销毁队列
void destroyQueue(Queue *queue) {
free(queue->elements);
free(queue);
}
// 判断队列是否为空
bool isEmpty(Queue *queue) {
return queue->size == 0;
}
// 判断队列是否已满
bool isFull(Queue *queue) {
return queue->size == queue->capacity;
}
// 入队操作
bool enqueue(Queue *queue, int value) {
if (isFull(queue)) {
printf("Queue is full!\n");
return false;
}
queue->elements[queue->rear] = value;
queue->rear = (queue->rear + 1) % queue->capacity; // 循环移动
queue->size++;
return true;
}
// 出队操作
bool dequeue(Queue *queue, int *value) {
if (isEmpty(queue)) {
printf("Queue is empty!\n");
return false;
}
*value = queue->elements[queue->front];
queue->front = (queue->front + 1) % queue->capacity; // 循环移动
queue->size--;
return true;
}
// 获取队首元素(不删除)
bool peekFront(Queue *queue, int *value) {
if (isEmpty(queue)) return false;
*value = queue->elements[queue->front];
return true;
}
// 测试用例
int main() {
Queue *queue = createQueue(5);
enqueue(queue, 10);
enqueue(queue, 20);
enqueue(queue, 30);
enqueue(queue, 40);
enqueue(queue, 50); // 队列已满
int val;
while (dequeue(queue, &val)) {
printf("Dequeued: %d\n", val); // 输出 10,20,30,40,50
}
destroyQueue(queue);
return 0;
}