简单队列
简单队列是一种基本的数据结构,它遵循先进先出(FIFO)的原则,即先加入队列的元素先被取出。可以用数组或链表实现。
以下是用数组实现简单队列的示例代码(使用循环队列):
#include <stdio.h>
#define MAX_SIZE 100
int queue[MAX_SIZE];
int front = -1, rear = -1;
void enqueue(int value) {
if ((rear + 1) % MAX_SIZE == front) { // 判断队列是否已满
printf("Queue is full.\n");
return;
}
if (front == -1) front = 0; // 队列为空,初始化front
rear = (rear + 1) % MAX_SIZE; // 循环队列,rear指向下一个空位置
queue[rear] = value; // 插入元素
}
int dequeue() {
if (front == -1) { // 判断队列是否为空
printf("Queue is empty.\n");
return -1;
}
int value = queue[front];
if (front == rear) { // 队列中只有一个元素,重置front和rear
front = -1;
rear = -1;
} else {
front = (front + 1) % MAX_SIZE; // 循环队列,front指向下一个元素
}
return value;
}
int main() {
enqueue(1);
enqueue(2);
enqueue(3);
printf("%d\n", dequeue()); // 输出1
printf("%d\n", dequeue()); // 输出2
enqueue(4);
printf("%d\n", dequeue()); // 输出3
printf("%d\n", dequeue()); // 输出4
printf("%d\n", dequeue()); // 输出"Queue is empty."
return 0;
}
在上面的示例代码中,使用一个数组实现循环队列,通过front和rear分别指向队列的首尾元素,enqueue操作在rear处插入元素,dequeue操作从front处删除元素。注意,当队列为空时,front和rear都应该重置为-1。