设计一个循环队列的表示和实现的演示程序,其基本操作有初始化队列、判队列空否、入队列、出队列等功能。
时间: 2023-04-29 22:02:47 浏览: 145
循环队列是一种常用的数据结构,它可以在固定大小的数组中实现队列的功能。下面是一个循环队列的表示和实现的演示程序,包括初始化队列、判队列空否、入队列、出队列等基本操作。
// 定义循环队列结构体
typedef struct {
int *data; // 存储队列元素的数组
int front; // 队首指针
int rear; // 队尾指针
int size; // 队列大小
} CircularQueue;
// 初始化循环队列
void initQueue(CircularQueue *queue, int size) {
queue->data = (int *)malloc(size * sizeof(int));
queue->front = 0;
queue->rear = 0;
queue->size = size;
}
// 判断循环队列是否为空
int isEmpty(CircularQueue *queue) {
return queue->front == queue->rear;
}
// 判断循环队列是否已满
int isFull(CircularQueue *queue) {
return (queue->rear + 1) % queue->size == queue->front;
}
// 入队列
void enqueue(CircularQueue *queue, int value) {
if (isFull(queue)) {
printf("Queue is full.\n");
return;
}
queue->data[queue->rear] = value;
queue->rear = (queue->rear + 1) % queue->size;
}
// 出队列
int dequeue(CircularQueue *queue) {
if (isEmpty(queue)) {
printf("Queue is empty.\n");
return -1;
}
int value = queue->data[queue->front];
queue->front = (queue->front + 1) % queue->size;
return value;
}
// 测试循环队列的基本操作
int main() {
CircularQueue queue;
initQueue(&queue, 5);
printf("Is queue empty? %d\n", isEmpty(&queue));
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
printf("Is queue empty? %d\n", isEmpty(&queue));
printf("Dequeue: %d\n", dequeue(&queue));
printf("Dequeue: %d\n", dequeue(&queue));
printf("Dequeue: %d\n", dequeue(&queue));
printf("Is queue empty? %d\n", isEmpty(&queue));
return 0;
}
阅读全文