1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 看病排队问题

看病排队问题

时间:2023-06-28 22:25:36

相关推荐

看病排队问题

目录

一、代码

二、功能函数介绍

三、运行截图

一、代码

#define _CRT_SECURE_NO_WARNINGS 1//不用VS删除这一行#include<stdio.h>#include<stdlib.h>struct LinkQueue{int data;struct LinkQueue* next;};struct Node{LinkQueue* frount;LinkQueue* rear;};int e;//全局变量,记录患者编号//取号,入队实现void EnQueue(LinkQueue& Q, Node& N){e++;LinkQueue* p;p = (LinkQueue*)malloc(sizeof(LinkQueue));p->data = e;N.rear->next = p;N.rear = p;printf("您是%d号,请耐心候诊!\n", N.rear->data);}//医生操作就诊,出队实现void DeQueue(LinkQueue& Q, Node& N){LinkQueue* r;r = N.frount;N.frount = N.frount->next;free(r);if (N.rear == N.frount){N.frount = N.rear;printf("目前无病人候诊!\n");exit(0);}elseprintf("请%d号病人就诊,请%d号病人候诊\n", N.frount->data, N.frount->data + 1);}//病人查询自己前面还有多少位病人void PatientQuery(LinkQueue& Q, Node& N){int i;printf("请输入您是几号病人:");scanf("%d", &i);N.rear->data = i;if (N.rear->data == 1)printf("您是1号,请尽快就诊!\n");elseprintf("在您前面还有%d位病人\n", N.rear->data - N.frount->data - 1);}//医生查询还需诊断的人数void DoctorQuery(LinkQueue& Q, Node& N){printf("您还需要诊断%d位病人\n", N.rear->data - N.frount->data);}//菜单void menu(void){printf("***************************************************\n");printf("****** 请输入您的选择 *******\n");printf("****** 1 ---- 取号*******\n");printf("****** 2 ---- 就诊(医生操作)*******\n");printf("******3 ---- 查看候诊人数(医生操作) *******\n");printf("****** 4 ---- 查看您前面还有多少位病人 *******\n");printf("***************************************************\n");}//主函数int main(void){LinkQueue Q;Node N;LinkQueue* q;q = (LinkQueue*)malloc(sizeof(LinkQueue));q->next = NULL;q->data = 0;N.frount = N.rear = q;N.frount->data = N.rear->data = q->data;//以上为初始化链队列menu();while (1){int choice;printf("\n请输入选择:");scanf("%d", &choice);switch (choice){case 1:EnQueue(Q, N);break;case 2:DeQueue(Q, N);break;case 3:DoctorQuery(Q, N);break;case 4:PatientQuery(Q, N);break;}}return 0;}

二、功能函数介绍

1. EnQueue 函数:实现患者取号并入队操作,每次取号增加全局变量 e 值,将其赋给新的 LinkQueue 结构体指针 p 的 data 成员,然后将其插入到链队列的尾部(rear 指针所指向节点的 next 指针),并打印出患者所得到的编号。

//取号,入队实现void EnQueue(LinkQueue& Q, Node& N){e++;LinkQueue* p;p = (LinkQueue*)malloc(sizeof(LinkQueue));p->data = e;N.rear->next = p;N.rear = p;printf("您是%d号,请耐心候诊!\n", N.rear->data);}

2. DeQueue 函数:实现医生查看患者信息、就诊操作,并从链队列头部(front 指针所指向节点)删除该患者信息。如果链队列为空,则输出提示信息并退出程序;否则输出目前行列头部患者信息和下一个等待就诊的患者信息。

//医生操作就诊,出队实现void DeQueue(LinkQueue& Q, Node& N){LinkQueue* r;r = N.frount;N.frount = N.frount->next;free(r);if (N.rear == N.frount){N.frount = N.rear;printf("目前无病人候诊!\n");exit(0);}elseprintf("请%d号病人就诊,请%d号病人候诊\n", N.frount->data, N.frount->data + 1);}

3. PatientQuery 函数: 这个函数可用于查询一个患者在队列中的位置。它接收输入的患者编号,计算该患者前面有多少个患者,然后将这些信息显示给患者。

//病人查询自己前面还有多少位病人void PatientQuery(LinkQueue& Q, Node& N){int i;printf("请输入您是几号病人:");scanf("%d", &i);N.rear->data = i;if (N.rear->data == 1)printf("您是1号,请尽快就诊!\n");elseprintf("在您前面还有%d位病人\n", N.rear->data - N.frount->data - 1);}

4. DoctorQuery 函数: 这个函数用于为医生显示队列中还有多少个患者需要就诊。它计算队列中的患者数量,队尾数据域减对头数据域即可,然后显示结果。

//医生查询还需诊断的人数void DoctorQuery(LinkQueue& Q, Node& N){printf("您还需要诊断%d位病人\n", N.rear->data - N.frount->data);}

5. main() 函数:main函数中包含了初始化链队列,此时N.frount和N.rear的数据域都等于1。使用 menu() 函数打印主菜单,然后通过 while 循环等待用户的输入,根据用户输入调用相应的功能函数产生操作,并重复上述流程直到用户选择退出。

//主函数int main(void){LinkQueue Q;Node N;LinkQueue* q;q = (LinkQueue*)malloc(sizeof(LinkQueue));q->next = NULL;q->data = 0;N.frount = N.rear = q;N.frount->data = N.rear->data = q->data;//以上为初始化链队列menu();while (1){int choice;printf("\n请输入选择:");scanf("%d", &choice);switch (choice){case 1:EnQueue(Q, N);break;case 2:DeQueue(Q, N);break;case 3:DoctorQuery(Q, N);break;case 4:PatientQuery(Q, N);break;}}return 0;}

三、运行截图

1.取号

2.就诊

3.医生查询、病人查询

4.功能复合

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。