c++实现首先赋给 4 个队列一个初始顺序,当排名为1的队满了之后,接着插入排名为2 的队列,以此类推;当排名为1的队列全部出队完后,若2号队列不空,则1号队列变4号队列,2号队列变1号队列,3号队列变2号队列,4号队列变3号队列.
时间: 2023-12-07 22:55:10 浏览: 115
以下是一种实现方式:
```c
#include <stdio.h>
#define QUEUE_SIZE 10 // 队列大小
// 队列结构体
typedef struct {
int data[QUEUE_SIZE];
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 队列初始化
void initQueue(Queue *q) {
q->front = q->rear = 0;
}
// 判断队列是否为空
int isQueueEmpty(Queue *q) {
return q->front == q->rear;
}
// 判断队列是否已满
int isQueueFull(Queue *q) {
return (q->rear + 1) % QUEUE_SIZE == q->front;
}
// 入队
void enqueue(Queue *q, int x) {
if (!isQueueFull(q)) {
q->data[q->rear] = x;
q->rear = (q->rear + 1) % QUEUE_SIZE;
}
}
// 出队
int dequeue(Queue *q) {
if (!isQueueEmpty(q)) {
int x = q->data[q->front];
q->front = (q->front + 1) % QUEUE_SIZE;
return x;
}
return -1;
}
int main() {
Queue q[4]; // 4个队列
int i, j, k;
for (i = 0; i < 4; i++) {
initQueue(&q[i]);
for (j = 0; j < QUEUE_SIZE; j++) {
enqueue(&q[i], i * QUEUE_SIZE + j);
}
}
i = 0; // 当前排名为1的队列编号
while (1) {
int x = dequeue(&q[i]);
if (x == -1) { // 当前队列已空
if (!isQueueEmpty(&q[(i + 1) % 4])) { // 下一个队列不为空
// 交换队列编号
k = q[0].front;
q[0].front = q[3].front;
q[3].front = q[2].front;
q[2].front = q[1].front;
q[1].front = k;
i = 0; // 当前排名为1的队列变为队列0
} else {
break; // 所有队列都已空,结束循环
}
} else {
printf("%d ", x); // 输出出队元素
if ((x + 1) % QUEUE_SIZE == 0) { // 当前队列已满
i = (i + 1) % 4; // 排名加1
}
}
}
printf("\n");
return 0;
}
```
该程序首先初始化4个队列,每个队列中有10个元素,每个元素的值为队列编号乘以队列大小加上元素编号。然后,程序进入一个循环,在循环中,程序从当前排名为1的队列中出队一个元素,如果当前队列已空,则按照题目要求将队列编号进行交换,然后继续从新的当前排名为1的队列中出队元素,直到所有队列都已空为止。如果当前出队元素的值加1等于队列大小,则说明当前队列已满,程序将排名加1,即将下一个队列变为当前排名为1的队列。程序输出的是出队的元素的值。
阅读全文