C语言用队列实现:患者在医院看病过程:先排队等候,再看病治疗。在排队的过程中主要重复做两件事情,一是患者达到诊室,将病历交给护士,排到等候队列中候诊;二是护士从等候队列中取出下一个患者的病历,该患者进入诊室看病。下班后,不再接受病人排队。按照“先到先服务”原则,设计一个算法模拟病人等候就诊的过程。 【样例输入】 anaq 【样例输出】 Your patient’s No. is 1. There are 1 patient(s) waiting ahead of you. Patient No. 1, please go to the clinic. Your patient’s No. is 2. There are 1 patient(s) waiting ahead of you. It is the end of today. Following patients please go to the clinic in turn: 2 【样例输入】 N 【样例输出】 No patient is waiting in line. 【样例输入】 B 【样例输出】 ERROR
时间: 2024-02-25 13:58:55 浏览: 83
以下是用C语言实现的队列模拟患者等候就诊过程的程序,可以参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct Patient {
char name[20];
int num;
} Patient;
typedef struct Queue {
Patient data[MAX_SIZE];
int front, rear;
} Queue;
void initQueue(Queue *q);
int isQueueEmpty(Queue *q);
int isQueueFull(Queue *q);
void enqueue(Queue *q, Patient p);
Patient dequeue(Queue *q);
int main() {
Queue q;
initQueue(&q);
char name[20];
int num = 1;
while (1) {
printf("Please input the patient name (or 'N' to quit): ");
scanf("%s", name);
if (strcmp(name, "N") == 0) {
break;
}
Patient p;
strcpy(p.name, name);
p.num = num++;
enqueue(&q, p);
printf("Your patient's No. is %d. There are %d patient(s) waiting ahead of you.\n", p.num, q.rear - q.front);
}
if (isQueueEmpty(&q)) {
printf("No patient is waiting in line.\n");
return 0;
}
printf("Following patients please go to the clinic in turn: ");
while (!isQueueEmpty(&q)) {
Patient p = dequeue(&q);
printf("%d ", p.num);
}
printf("\n");
return 0;
}
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 == MAX_SIZE;
}
void enqueue(Queue *q, Patient p) {
if (isQueueFull(q)) {
printf("ERROR: Queue is full.\n");
exit(1);
}
q->data[q->rear] = p;
q->rear++;
}
Patient dequeue(Queue *q) {
if (isQueueEmpty(q)) {
printf("ERROR: Queue is empty.\n");
exit(1);
}
Patient p = q->data[q->front];
q->front++;
return p;
}
```
程序中使用了两个结构体,`Patient`表示患者信息,包括姓名和编号;`Queue`表示队列,包括队列中存储的患者信息,以及队头和队尾指针。
程序中先使用`initQueue`函数初始化队列,然后使用`enqueue`函数将患者信息加入队列,使用`dequeue`函数从队列中取出下一个患者的信息进行就诊。在每次患者加入队列时,程序会输出该患者的编号以及队列中等待的患者数量。
最后,程序会遍历队列,输出所有患者的编号,表示按照“先到先服务”的原则,依次进行就诊。
注意,程序中使用了`strcmp`函数比较字符串是否相等,使用了`exit`函数退出程序,并且在队列满或队列空时会输出错误提示。
阅读全文