使用一个足够大的数组建立一个循环队列,然后从键盘输入若干个元素,依次进入队列,如果超过队列的容量,则后面的元素需覆盖前面的元素,然后按照出队列的标准顺序,依次输出栈内的每一个元素。用数组实现,c语言
时间: 2024-09-20 07:03:52 浏览: 36
最大和最小优先队列的基本操作
4星 · 用户满意度95%
在C语言中,可以使用数组来实现循环队列(Circular Queue)。首先,你需要定义一个结构体表示队列元素,然后创建两个指针front和rear分别指向队首和队尾。当队列满时,front和rear会相遇;当队列为空时,front等于rear。
```c
#include <stdio.h>
#define MAX_SIZE 10 // 队列的最大容量
typedef struct {
int data[MAX_SIZE]; // 存储数据的数组
int front; // 队首索引
int rear; // 队尾索引
} Queue;
// 初始化队列
void initQueue(Queue* q) {
q->front = q->rear = -1;
}
// 入队操作
bool enqueue(Queue* q, int value) {
if (q->rear == (q->front + MAX_SIZE - 1) % MAX_SIZE) { // 判断是否已满
return false;
}
q->rear = (q->rear + 1) % MAX_SIZE; // 循环处理队尾
q->data[q->rear] = value;
return true;
}
// 出队操作
int dequeue(Queue* q) {
if (q->front == -1) { // 判断队空
return -1;
}
int value = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE; // 队首后移
return value;
}
// 打印队列内容
void printQueue(Queue* q) {
for (int i = q->front; i != q->rear; i = (i + 1) % MAX_SIZE) {
printf("%d ", q->data[i]);
}
if (q->front == q->rear) { // 检查队列是否为空
printf("Empty\n");
} else {
printf("%d\n", q->data[q->rear]); // 如果队尾未到达队首,再打印最后一个元素
}
}
int main() {
Queue queue;
initQueue(&queue);
int input;
while (scanf("%d", &input) == 1 && input != 0) {
enqueue(&queue, input);
printQueue(&queue); // 输出队列内容
}
return 0;
}
```
阅读全文