-
定义队列结构:首先定义了一个名为
Queue
的结构体,它包含一个整数数组data
用于存储队列中的元素,以及两个整数front
和rear
分别表示队列的头部和尾部。 -
初始化队列:
initialize
函数用于初始化队列,将front
和rear
都设置为-1,表示队列为空。 -
判空函数:
isEmpty
函数用于判断队列是否为空,如果front
等于-1,则队列为空。 -
判满函数:
isFull
函数用于判断队列是否已满,如果(rear + 1) % MAX_SIZE
等于front
,则队列已满。这里使用% MAX_SIZE
是为了实现循环队列的特性,即当rear
到达数组末尾时,下一个位置会循环到数组的开始。 -
入队函数:
enqueue
函数用于向队列中添加一个元素。首先检查队列是否已满,如果已满则打印错误信息并返回。如果队列为空,则将front
和rear
都设置为0,表示队列中只有一个元素。否则,将rear
移动到下一个位置。最后,将新元素添加到data
数组中。 -
出队函数:
dequeue
函数用于从队列中移除一个元素。首先检查队列是否为空,如果为空则打印错误信息并退出程序。然后,将front
指向的元素值返回,如果front
和rear
相等,则将它们都设置为-1,表示队列为空。否则,将front
移动到下一个位置。 -
查看队头函数:
peek
函数用于查看队列头部的元素,但不移除它。如果队列为空,则打印错误信息并退出程序。否则,返回front
指向的元素值。 -
主函数:
main
函数是程序的入口点。首先,创建一个Queue
类型的变量queue
并初始化。然后,连续入队5个元素。接着,连续出队4个元素,并打印它们。最后,打印队列头部的元素,此时队列中应该只剩下一个元素。
#include <stdio.h>
#include <stdlib.h>
//定义队列结构
#define MAX_SIZE 100
typedef struct Queue {
int data[MAX_SIZE];
int front, rear;
}Queue;
//初始化队列
void initialize(Queue* queue) {
queue->front = -1;
queue->rear = -1;
}
//判空
int isEmpty(Queue* queue) {
return queue->front == -1;
}
//判满
int isFull(Queue* queue) {
return (queue->rear + 1) % MAX_SIZE == queue->front;
}
//入队
void enqueue(Queue* queue, int value) {
if (isFull(queue)) {
printf("Queue overflow!\n");
return;
}
if (isEmpty(queue))
queue->front = queue->rear = 0;
else
queue->rear = (queue->rear + 1) % MAX_SIZE;
queue->data[queue->rear] = value;
}
//出队
int dequeue(Queue* queue) {
if (isEmpty(queue)) {
printf("Queue underflow!\n");
exit(1);
}
int value = queue->data[queue->front];
if (queue->front == queue->rear)
queue->front = queue->rear = -1;
else
queue->front = (queue->front + 1) % MAX_SIZE;
return value;
}
//查看队头
int peek(Queue* queue) {
if (isEmpty(queue)) {
printf("Queue is empty!\n");
exit(1);
}
return queue->data[queue->front];
}
//主函数
int main() {
Queue queue;
initialize(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
enqueue(&queue, 4);
enqueue(&queue, 5);
printf("Dequeued element:%d\n", dequeue(&queue));
printf("Dequeued element:%d\n", dequeue(&queue));
printf("Dequeued element:%d\n", dequeue(&queue));
printf("Dequeued element:%d\n", dequeue(&queue));
printf("Front element:%d\n", peek(&queue));
return 0;
}