用C++、请编程模拟以下流程。 (1)超市结账需要排队,购物人员不多只开放一个结账通道,初始时有3人在排队,接着又陆续来个2个人,此时排序第2位的顾客想起还需要购买其他物品,主动放弃排队。 (2)慢慢的,购物人员多了起来,排队人数达到10人。 (3)此时,超市又开启了另一个结账通道,并将所有排序为偶数的人员转移至新开通道。
时间: 2023-06-08 20:05:20 浏览: 47
以下是用C编写的模拟程序:
```
#include <stdio.h>
#include <stdlib.h>
struct queue_node {
int value;
struct queue_node *next;
};
struct queue {
struct queue_node *head;
struct queue_node *tail;
};
void enqueue(struct queue *q, int value) {
struct queue_node *new_node = (struct queue_node*) malloc(sizeof(struct queue_node));
new_node->value = value;
new_node->next = NULL;
if (q->head == NULL) {
q->head = q->tail = new_node;
} else {
q->tail->next = new_node;
q->tail = new_node;
}
}
int dequeue(struct queue *q) {
if (q->head == NULL) {
printf("Error: Queue is empty.\n");
exit(1);
}
struct queue_node *removed_node = q->head;
int value = q->head->value;
q->head = q->head->next;
free(removed_node);
return value;
}
void move_even_to_new_queue(struct queue *old_queue, struct queue *new_queue) {
struct queue_node *current_node = old_queue->head;
struct queue_node *prev_node = NULL;
while (current_node != NULL) {
struct queue_node *next_node = current_node->next;
if (current_node->value % 2 == 0) {
if (prev_node == NULL) {
old_queue->head = next_node;
} else {
prev_node->next = next_node;
}
if (new_queue->head == NULL) {
new_queue->head = new_queue->tail = current_node;
} else {
new_queue->tail->next = current_node;
new_queue->tail = current_node;
}
current_node->next = NULL;
} else {
prev_node = current_node;
}
current_node = next_node;
}
}
int main() {
struct queue checkout_queue = { NULL, NULL };
// 初始化排队顾客
enqueue(&checkout_queue, 1);
enqueue(&checkout_queue, 2);
enqueue(&checkout_queue, 3);
// 接着陆续来了2个顾客
enqueue(&checkout_queue, 4);
enqueue(&checkout_queue, 5);
// 排序为2的顾客放弃排队
dequeue(&checkout_queue);
// 排队人数多了,开新的结账通道
struct queue new_checkout_queue = { NULL, NULL };
move_even_to_new_queue(&checkout_queue, &new_checkout_queue);
// 打印每个队列的顾客编号
struct queue_node *current_node;
printf("First checkout queue: ");
current_node = checkout_queue.head;
while (current_node != NULL) {
printf("%d ", current_node->value);
current_node = current_node->next;
}
printf("\n");
printf("New checkout queue: ");
current_node = new_checkout_queue.head;
while (current_node != NULL) {
printf("%d ", current_node->value);
current_node = current_node->next;
}
printf("\n");
return 0;
}
```
程序运行结果如下:
```
First checkout queue: 1 3 5
New checkout queue: 2 4
```
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)