用c++代码写一个循环队列
时间: 2023-12-29 12:44:03 浏览: 91
以下是用 C 语言实现循环队列的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE];
int front, rear;
} Queue;
void initQueue(Queue *queue) {
queue->front = queue->rear = 0;
}
int isFull(Queue *queue) {
return (queue->rear + 1) % MAX_SIZE == queue->front;
}
int isEmpty(Queue *queue) {
return queue->front == queue->rear;
}
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_SIZE;
}
int dequeue(Queue *queue) {
if (isEmpty(queue)) {
printf("Queue is empty.\n");
return -1;
}
int value = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX_SIZE;
return value;
}
int main() {
Queue queue;
initQueue(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
printf("%d\n", dequeue(&queue));
printf("%d\n", dequeue(&queue));
enqueue(&queue, 4);
enqueue(&queue, 5);
while (!isEmpty(&queue)) {
printf("%d ", dequeue(&queue));
}
return 0;
}
```
在这个代码中,我们定义了一个 `Queue` 结构体,其中包含一个 `MAX_SIZE` 大小的数组 `data`、一个队头指针 `front` 和一个队尾指针 `rear`。`initQueue` 函数用于初始化队列,将队头和队尾都指向 0。`isFull` 函数用于判断队列是否已满,如果队列的下一个位置是队头,说明队列已满。`isEmpty` 函数用于判断队列是否为空,如果队头和队尾相等,说明队列为空。`enqueue` 函数用于向队列中添加元素,如果队列已满,则输出提示信息。`dequeue` 函数用于从队列中取出元素,如果队列为空,则输出提示信息。在 `enqueue` 和 `dequeue` 函数中,我们使用了循环队列的思想,将队尾指针加 1 或队头指针加 1 时,如果超过了数组的大小,则回到数组的开头。
在 `main` 函数中,我们首先初始化了队列,然后向队列中添加了元素 1、2 和 3。接着,我们从队列中取出了两个元素,并向队列中添加了元素 4 和 5。最后,我们循环取出了队列中的所有元素,并输出它们。
阅读全文