1.用c语言创建一个队列,并把所有的人都放入队列中。 2.从队列的头部开始,依次报数,数到“1”的人出列,数到“2”的人直接站到队伍的最右端。 3.将出列后的人从队列中删除,并将新来的人添加到队列的尾部。 4.重复步骤2和步骤3,直到队列中没有人可出列为止。 5.输出出列顺序。
时间: 2024-10-28 18:08:28 浏览: 40
在C语言中创建一个队列并按照上述规则操作,可以使用结构体数组来模拟队列,因为C语言的标准库并未提供内置的队列数据结构。这里我们可以定义一个`Person`结构体和一个整型数组作为队列,使用两个指针`front`和`rear`来跟踪队列的头和尾。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义结构体表示一个人
typedef struct {
int number;
} Person;
// 队列函数定义
void enqueue(Person queue[], int *rear) {
if (*rear == sizeof(queue)/sizeof(queue[0]) - 1) {
printf("Queue is full.\n");
return;
}
queue[*rear].number = *rear + 1;
(*rear)++;
}
void dequeue(Person queue[], int *front, int *rear) {
if (*front == *rear) {
printf("Queue is empty.\n");
return;
}
Person temp = queue[*front];
printf("Number %d exits the queue.\n", temp.number);
*front++;
free(temp);
}
void process_queue(Person queue[], int *front, int *rear) {
for (int i = 0; i <= *rear; i++) {
if (queue[i].number == 1) {
dequeue(queue, front, rear); // 如果是1,则出列
} else if (queue[i].number == 2) {
// 将2移动到队尾
enqueue(queue, rear);
} else {
printf("Number %d is counting.\n", queue[i].number);
}
}
}
int main() {
const int capacity = 10; // 队列容量
Person queue[capacity]; // 创建队列
int front = 0, rear = 0;
// 入队,假设初始队列为空
while (true) {
int input;
scanf("%d", &input);
if (input == -1) break; // 输入-1表示结束输入
enqueue(queue, &rear);
// 进行报数和处理
process_queue(queue, &front, &rear);
}
printf("Numbers that exited the queue in order: ");
for (int i = 0; i < rear-front; i++) {
printf("%d ", queue[front+i].number);
}
printf("\n");
return 0;
}
```
阅读全文
相关推荐












