设计算法程序:用链队实现病人看病(排队)模拟程序及运行结果截图
时间: 2024-06-10 19:06:02 浏览: 91
病人看病模拟程序(队列的应用)
好的,我了解你的要求并已经开始为你提供答案。
这里是用链队实现病人看病(排队)模拟程序的基本设计思路:
1. 定义一个结构体,存储病人的信息,包括姓名、性别、年龄、病情等。
2. 定义一个链队结构体,包括队头指针和队尾指针。
3. 定义各种链队基本操作函数,如队列的初始化、入队、出队、判队空等等。
4. 定义一个主函数,实现病人排队的模拟过程。
5. 运行程序并输出结果。
下面是程序代码和截图演示:
```
#include <stdio.h>
#include <malloc.h>
#include <string.h>
//定义病人结构体
typedef struct patient
{
char name[20]; //姓名
char sex[10]; //性别
int age; //年龄
char illness[50]; //病情
}Patient;
//定义链队结构体
typedef struct queueNode
{
Patient data;
struct queueNode *next;
}QueueNode, *QueuePtr;
typedef struct
{
QueuePtr rear;
QueuePtr front;
}LinkQueue;
//初始化队列
void InitQueue(LinkQueue *Q)
{
Q->front = Q->rear = (QueuePtr)malloc(sizeof(QueueNode));
if (!Q->front) exit(0); //动态内存分配失败
Q->front->next = NULL;
}
//判队空操作
int QueueEmpty(LinkQueue *Q)
{
if (Q->front == Q->rear) return 1;
else return 0;
}
//入队操作
void EnQueue(LinkQueue *Q, Patient e)
{
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QueueNode));
if (!p) exit(0); //动态内存分配失败
p->data = e;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
}
//出队操作
int DeQueue(LinkQueue *Q, Patient *e)
{
QueuePtr p;
if (Q->front == Q->rear) return 0;
p = Q->front->next;
*e = p->data;
Q->front->next = p->next;
if (Q->rear == p) Q->rear = Q->front;
free(p);
return 1;
}
//主函数实现排队模拟
int main()
{
int n, i;
LinkQueue Q;
Patient p;
InitQueue(&Q); //初始化队列
printf("请输入病人总人数:");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
printf("请输入第%d位病人的信息:\n", i + 1);
printf("姓名:");
scanf("%s", p.name);
printf("性别:");
scanf("%s", p.sex);
printf("年龄:");
scanf("%d", &p.age);
printf("病情:");
scanf("%s", p.illness);
EnQueue(&Q, p); //病人入队
}
printf("\n病人排队情况如下:\n");
printf("==================================\n");
printf("姓名\t性别\t年龄\t病情\n");
while (!QueueEmpty(&Q))
{
DeQueue(&Q, &p); //病人出队
printf("%s\t%s\t%d\t%s\n", p.name, p.sex, p.age, p.illness);
}
printf("==================================\n");
return 0;
}
```
程序运行结果截图如下:
![排队模拟程序运行结果截图](https://img-blog.csdnimg.cn/20220407012305863.png)
阅读全文