欢乐谷有一娱乐设施,因项目刺激致有n名游客还在排队,为了方便等待的游客。 现需你设计一个系统,完成以下要求。 要求如下: 1)在排队的游客需按顺序录入他们的信息,包括门票编号,姓名,性别,年龄等。并按排队顺序显示在屏幕上。 2)假定设施一次运行3分钟,每次最多搭载5名游客,将之后前来的游客的等待时间显示在屏幕上。 3)现队列中有m位游客(队列中任意位置)因失去耐心离开, 请同步更新排队列表名单和之后前来的游客的等待时间。 <涉及知识> 1)结构体的使用 2)动态链表的创建 3)链表的查询和删除 4)遍历链表时涉及的简单计算
时间: 2024-03-24 07:42:00 浏览: 21
以下是一个简单的实现欢乐谷排队系统的C语言代码,仅供参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20 // 姓名最大长度
#define MAX_TICKET_NUM 1000 // 门票编号最大值
typedef struct Node {
int ticketNum; // 门票编号
char name[MAX_NAME_LEN]; // 姓名
char gender; // 性别
int age; // 年龄
int waitTime; // 等待时间
struct Node *next; // 下一个节点指针
} Node;
typedef struct Queue {
Node *front; // 队首指针
Node *rear; // 队尾指针
int size; // 队列长度
} Queue;
// 初始化队列
void initQueue(Queue *q) {
q->front = q->rear = NULL;
q->size = 0;
}
// 判断队列是否为空
int isQueueEmpty(Queue *q) {
return q->front == NULL;
}
// 入队
void enQueue(Queue *q, int ticketNum, char *name, char gender, int age) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->ticketNum = ticketNum;
strncpy(newNode->name, name, MAX_NAME_LEN);
newNode->gender = gender;
newNode->age = age;
newNode->waitTime = q->size * 3; // 计算等待时间
newNode->next = NULL;
if (isQueueEmpty(q)) {
q->front = q->rear = newNode;
} else {
q->rear->next = newNode;
q->rear = newNode;
}
q->size++;
}
// 出队
void deQueue(Queue *q) {
if (isQueueEmpty(q)) {
printf("Queue is empty.\n");
return;
}
Node *temp = q->front;
q->front = q->front->next;
free(temp);
q->size--;
}
// 打印队列元素
void printQueue(Queue *q) {
if (isQueueEmpty(q)) {
printf("Queue is empty.\n");
return;
}
printf("Queue:\n");
Node *p = q->front;
while (p != NULL) {
printf("TicketNum: %d, Name: %s, Gender: %c, Age: %d, WaitTime: %d\n", p->ticketNum, p->name, p->gender, p->age, p->waitTime);
p = p->next;
}
printf("\n");
}
// 查询队列中是否存在指定门票编号的游客
int searchQueue(Queue *q, int ticketNum) {
Node *p = q->front;
while (p != NULL) {
if (p->ticketNum == ticketNum) {
return 1;
}
p = p->next;
}
return 0;
}
// 删除队列中指定门票编号的游客
void deleteNode(Queue *q, int ticketNum) {
Node *p = q->front;
Node *prev = NULL;
while (p != NULL) {
if (p->ticketNum == ticketNum) {
if (prev == NULL) {
q->front = p->next;
} else {
prev->next = p->next;
}
free(p);
q->size--;
return;
}
prev = p;
p = p->next;
}
}
int main() {
Queue q;
initQueue(&q);
enQueue(&q, 1001, "Alice", 'F', 25);
enQueue(&q, 1002, "Bob", 'M', 30);
enQueue(&q, 1003, "Charlie", 'M', 20);
printQueue(&q);
deleteNode(&q, 1002);
printQueue(&q);
enQueue(&q, 1004, "David", 'M', 35);
printQueue(&q);
return 0;
}
```
该代码使用了一个结构体 `Node` 来表示排队中的游客,其中包括门票编号、姓名、性别、年龄和等待时间等信息,以及一个指向下一个节点的指针。另外还使用了一个结构体 `Queue` 来表示队列,其中包括队首指针、队尾指针和队列长度等信息。
代码中实现了队列的初始化、判断队列是否为空、入队、出队、打印队列元素、查询队列中是否存在指定门票编号的游客和删除队列中指定门票编号的游客等操作。在 `main` 函数中,我们先初始化队列,然后依次入队三名游客,打印队列元素,再删除一个门票编号为 1002 的游客,再次打印队列元素,最后再入队一名游客,再次打印队列元素。
请注意,该代码只是一个简单的欢乐谷排队系统示例,实际应用中可能需要更复杂的数据结构和算法来满足需求。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)