数据结构病人看病程序的模拟
数据结构病人看病程序的模拟

实验二:病人看病模拟程序一、实验目的1、掌握单链队列存储方式的类型定义,掌握单链队列的基本运算的实现。
2、学会根据应用问题的需要选择合适的数据结构,掌握队列的先进先出运算规则及其在病人看病模拟程序中的应用,理解队列在运算过程中状态的变化。
二、实验内容编写一个程序,反映病人到医院看病排队看医生的情况。
三、需求分析1、运行环境:Windows操作环境,VisualC++6.02、程序应该达到的功能:在病人排队过程中,主要重复两件事:(1)病人到达就诊室,将病历交给护士,排到等待队列中候诊。
(2)护士从等待队列中取出下一位病人的病历,该病人进入入诊室就诊。
要求模拟病人等待就诊这一过程。
程序采用菜单方式,其选项及功能说民如下:(1) 排队一一输入排队病人的病历号,加入到病人排队队列中。
(2) 就诊一一病人排队队列中最前面的病人就诊,并将其从队列中删除。
(3) 查看排队一一从队首到队尾列出所有的排队病人的病历号。
(4) 不再排队,余下依次就诊一一从队首到队尾列出所有的排队病人的病历号,并退出运行。
(5) 下班一一退出运行。
四、概要设计1、数据结构的选择考虑到病人排队候诊的过程中具有先排队就诊的特诊,与队列的先进先出的特征相吻合,因此可以考虑采用队列线性表,其中,队列的存储结构有循环顺序队列和单链队列。
考虑到循环顺序队列的插入,删除浪费空间和时间,故采用单链队列,而建立带头结点的单链队列比无头结点的单链队列更简化了插入和删除操作,因此采用带头结点的单链队列。
2、程序的总体结构(1)建立名为“proj3_6”的项目文件,在该项目的管理下完成本程序开发。
在该项目下建立名为"exp3_6.cpp”的源程序文件,文件中主要包括main()和SeeDoctor()两个函数,它们的关系如图1(b)所示。
(3)链队的整体结构图示qu->rearqu->front2、main()函数:voidmain()(seeDoctor();)3、SeeDoctor()函数:模拟病人看病的过程。
数据结构:病人看病程序的模拟

数据结构:病人看病程序的模拟数据结构:病人看病程序的模拟1.简介本文档旨在介绍一个模拟病人看病程序的数据结构设计。
该程序模拟了病人挂号、医生诊断、药物配方等过程,帮助医院管理病人信息并提高医疗效率。
2.数据结构设计2.1 病人信息每个病人包括以下信息:●姓名●性别●年龄●症状描述●挂号时间●挂号状态2.2 医生信息每个医生包括以下信息:●姓名●所属科室●工号●擅长病症2.3 挂号队列●使用队列数据结构,保存已经挂号但未被接诊的病人信息,以先来先服务的原则进行排队。
2.4 医生列表●使用数组或链表数据结构,保存医生的信息。
2.5 处方列表●使用链表数据结构,保存每个病人的处方信息,并按照开方时间排序。
3.程序流程3.1 病人挂号●病人到达医院后,将个人信息添加到挂号队列中。
3.2 医生接诊●医生根据自己的科室和擅长病症选择挂号队列中的病人进行接诊。
●医生根据病人症状和自己的诊断经验,给出诊断结果,并将诊断结果和处方信息添加到病人的个人信息中。
3.3 开药配方●医生根据诊断结果,为病人开具处方单,并将处方信息添加到处方列表中。
4.附件信息本文档附带以下附件:●示例源代码:包含模拟病人看病程序的源代码。
●数据结构图:展示了程序中使用的各种数据结构之间的关系。
5.法律名词及注释5.1 挂号状态●挂号状态指病人的挂号情况,包括已挂号、已接诊、已就诊等状态。
5.2 处方单●处方单是医生为病人开具的药物配方清单,包括药物名称、剂量等信息。
6.结束语本文档详细介绍了模拟病人看病程序的数据结构设计,包括病人信息、医生信息、挂号队列、医生列表和处方列表等重要内容。
附件提供了源代码和数据结构图供参考。
以上是本文档涉及内容,感谢阅读。
数据结构课程设计_病人看病模拟程序文件

工程应用技术学院课程设计(数据结构)班级:程序设计人员:报告制作人员:答辩人员:指导教师:2015年3月1日课程设计任务书及成绩评定课题名称病人看病模拟程序Ⅰ、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。
(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
2、设计题目要求:编写一个程序,采用链式队列模拟病人到医院就诊的过程,设计一个病人就医管理系统。
Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学 2007[2] 严蔚敏数据结构题集(C语言版)清华大学 1999[3] 谭浩强 C程序设计(第四版)清华大学[4] 与所用编程环境相配套的C语言资料Ⅳ、成绩评定:成绩:(教师填写)指导老师:(签字)2015 年 3 月 1 日目录第一章概述 (1)第二章系统分析 (2)第三章概要设计 (3)第四章详细设计 (4)第五章运行与测试 (5)第六章总结与心得 (6)参考文献 (7)第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。
《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。
数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本容的理解。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
在这次的课程设计中我们选择的题目是病人看病模拟程序,我们将采用链式队列来模拟病人看病的程序。
传统的病人看病就诊的基本业务活动有挂号、排队、就诊。
数据结构与算法——看病排队候诊问题

看病排队候诊问题1.问题描述医院各科室的医生有限,因此病人到医院看病时必须排队候诊,而病人病情有轻重之分,不能简单地根据先来先服务的原则进行治疗,所以医院根据病人的病情规定了不同的优先级别。
医生在诊断治疗时,总是优先选择级别高的病人进行诊治,如果遇到两个级别相同的病人,则选择先来的病人进行诊治。
2.设计要求用队列模拟上述看病排队候诊问题,建立两个队列分别对应两个不同的优先级别,按照从终端读入输入数据的方式进行模拟管理。
输入1,表示有新的病人加入队列候诊,根据病情指定其优先级别;输入2,表示医生根据优先级别为病人进行诊治;输入3,表示退出系统。
3.数据结构解决看病排队候诊问题的数据结构,可以采用链式队列来实现。
4.分析与实现根据设计要求,定义两个队列q1和q2,q1对应优先级别低的队列,q2对应优先级别高的队列。
当有新的病人要加入队列候诊是,根据用户从键盘终端输入的优先级别,将该病人加入相应的队列中,并同时生成一个对应病人的id编号,需要说明的是,该id编号是按照病人到达医院进行排队的先后顺序依次生成的。
医生根据优先级别选择病人进行诊治,因此程序应该首先查看优先级别最高的队列q2,若队列q2不为空,则对队列q2进行出队操作,否则对应队列q1执行出队操作。
(1)MyEnQueue() :带有优先级别的队列的入队操作。
程序先根据用户从键盘输入的数据来制定病人候诊的优先级别,然后进行入队操作;(2)MyDeQueue() :用来模拟医生根据病人的病情选择优先级别高的病人进行诊断治疗过程的出队操作。
程序首先判断优先级别高的队列q2是否为空,不为空表示有病情严重的病人在候诊,医生优先诊断该病人,将队列q2中的对头元素出队,否则诊断排在队列q1中队头的病人。
如果两个队列均为空,则表示没有候诊病人,返回-1。
5.源代码#include <stdio.h>#include <stdlib.h>typedef int DataType;typedef struct qnode{DataType data; //data存放病人idstruct qnode *next; //next存放下一个病人id地址} LinkList;typedef struct{LinkList *front, *rear;} LinkQueue;void InQueue(LinkQueue *q,DataType i){LinkList *p;p=(LinkList *)malloc(sizeof(LinkList));if(p==NULL)printf("分配内存失败!\n");else{p->data=i;p->next=NULL;q->rear->next=p;q->rear=p;}}LinkQueue *InitQueue(){LinkQueue *q;LinkList *p;p=(LinkList *)malloc(sizeof(LinkList));q=(LinkQueue *)malloc(sizeof(LinkQueue));p->next=NULL;q->front=p;q->rear=q->front;return q;}int EmptyQueue(LinkQueue *q){int r=0;if(q->front==q->rear)r=0;elser=1;return r;}DataType OutQueue(LinkQueue *q){LinkList *p;DataType x;if(q->front->next==q->rear){q->front=q->rear;x=q->rear->data;}else{p=q->front->next;q->front->next=p->next;x=p->data;free(p);}return x;}void MyEnQueue(LinkQueue *q1,LinkQueue *q2,DataType d,int priority) {//重新定义带有优先级别的队列的入队操作if(priority==1)InQueue(q1,d);elseInQueue(q2,d);}DataType MyDeQueue(LinkQueue *q1,LinkQueue *q2){//重新定义带有优先权限的队列的出对操作DataType e;if(EmptyQueue(q2))e=OutQueue(q2);else if(EmptyQueue(q1))e=OutQueue(q1);elsee=-1;return e;}void main(){LinkQueue *q1,*q2; //分别为级别低和高的病人队列DataType idi=1,ido=-1; //分别为入队和出队病人的idint menu,priority; //分别为用户选择的菜单编号和病人看病的优先级别q1=InitQueue();q2=InitQueue();printf("****************************欢迎进入排队看病模拟系统****************************\n\n");printf("****************************1:新的病人加入候诊队列****************************\n\n");printf("*************************2:医生根据优先级别为病人诊治*************************\n\n");printf("*********************************3:退出系统************************************\n\n");while(1){printf("--------------------------------------------------------------------------------\n");printf("**********************请按菜单编号选择相应的操作(整数):**********************\n");scanf("%d",&menu);if(menu==1) //如果有新的病人则加入队列{printf("请输入病人的优先级别(1或2):");scanf("%d",&priority);printf("该病人的id为:%d\n",idi);MyEnQueue(q1,q2,idi,priority);idi++;}else if(menu==2){ido=MyDeQueue(q1,q2);if(-1!=ido)printf("当前被诊治的病人id为:%d\n",ido);elseprintf("无诊治病人,队列为空\n");}else if(menu==3)break;elseprintf("输入错误,请按菜单编号输入\n");}}6.结果。
看病排队候诊源代码 用队列实现

break;
case 0:
printf("恭喜您!您什么病也没有!\n"LQueue(LQueue *q) {//入队列
QNode *p;
int x;
if((p = (QNode *)malloc(sizeof(QNode))) == NULL)
printf("当前队首病人诊断完毕:");
Type_Of_Sickness(rand() % 6);//rand() % 6 产生的值为0~5,rand()函数产生的值在0到32767之间
return;
}
}
void main() {
LQueue q;
int choice;//选择变量
return;
x = Length_of_LQueue(q);
printf("您的号码为:**%d**,在您前面的病人共有%d个,请稍后!\n",x + 1,x);
p->data = x;//新结点的数据域为data
p->next = NULL;//新结点指针域为NULL
case 2:
printf("您得的是严重感冒,打针吧!\n");
break;
case 3:
printf("您发烧37.8度,挂瓶吧!\n");
break;
case 4:
printf("您是劳累过度了,注意休息即可!\n");
break;
case 5:
break;
看病排队候诊问题

数据结构: 队列对象中,由一个存放Patient类型的顺序表也
就是数组。
队列Queues类,主要方法:
int insert_Queues(Patient patient) //新 来病人,先暂时放最后一位
int arrange()//每次有新病人到来,都按 他的到来时间和病情,排队
医师Doctor 类
属性: int pid;//医生编号 int free;//医生状态,1表示空闲,可以为接诊;0表示
忙;-1表示不值班 主要方法: int treatment(Queues& queue)//从队列头部取病人
当医生读取病人后,读取其属性中需要治疗的时 间,队列“头”部标志向后移动一个位置。我们为了 模拟,就采用阻塞的方式,阻塞时间为病人需要治疗 的时间。
问题描述
医院某科室,有医生m名 现有病人n名,先后到达 病人病情轻重各有不同(分k级),重的
先就诊;病症相同的,先来的先就诊
相关理论依据
多级反馈队列调度算法调整 多线程的共享资源问题
排序算法: 直接插入排序
最简单的排序方法,它的基本操作是将一 个记录直接插入已排好序的有序表中,从而得 到一个新的、记录数增加1的有序表
4、在低优先级的队列中的进程在运行时,又有新到达的 作业,那么在运行完这个时间片后,CPU马上分配给 新到达的作业(抢占式)。
我们的系统用的方法
结合多级反馈队列算法,我们系统根据 实际情况,稍作调整。就是队列只有一 个,是按照优先级由高到底,分段排队。 就是最开头的是优先级最高的病人,同 样优先级的在一个分段中(“呈现梯队 方式 ”),由按照其到医院的时间先后 来排队。
看病(信息学奥赛一本通1371)

看病(信息学奥赛⼀本通1371)【题⽬描述】有个朋友在医院⼯作,想请BSNY帮忙做个登记系统。
具体是这样的,最近来医院看病的⼈越来越多了,因此很多⼈要排队,只有当空闲时放⼀批病⼈看病。
但医院的排队不同其他排队,因为多数情况下,需要病情严重的⼈优先看病,所以希望BSNY设计系统时,以病情的严重情况作为优先级,判断接下来谁可以去看病。
【输⼊】第⼀⾏输⼊n,表⽰有n个操作。
对于每个操作,⾸先输⼊push或pop。
push的情况,之后会输⼊ai 和 bi,分别表⽰患者姓名和患者病情优先级。
pop后⾯没有输⼊,但需要你输出。
【输出】对于pop的操作,输出此时还在排队⼈中,优先级最⼤的患者姓名和优先级。
表⽰他可以进去看病了。
如果此时没⼈在排队,那么输出”none”,具体可见样例。
【输⼊样例】7poppush bob 3push tom 5push ella 1poppush zkw 4pop【输出样例】nonetom 5zkw 4【提⽰】【数据规模和约定】1≤n≤100000,每个⼈的优先级都不⼀样,0≤优先级≤2000000000。
姓名都是⼩写字母组成的,长度⼩于20。
本题肥肠简单,⽤结构体把姓名和优先级绑在⼀起,定义⼀个优先队列就可以啦(关于优先队列的⽤法,请看☟queue怎么⽤咧↓↓↓ - endl\n - 博客园https:///ljy-endl/p/11260526.html)1 #include<bits/stdc++.h>2using namespace std;3struct node4{5string name;6int num;7 friend bool operator <(const node &A,const node &B){8return A.num<B.num;//别忘了在结构体⾥⽐⼤⼩9 }1011 node(){}12 node(string name1,int num1):name(name1),num(num1){} 1314};15 priority_queue<node>heap;16int main()17{18int T;19 scanf("%d",&T);20while(T--){21string s;22 cin>>s;23if(s=="pop"){24if(heap.empty()) printf("none\n");25else{26 cout<<heap.top().name<<""<<heap.top().num<<endl;27 heap.pop();28 }29 }30else{31string s1;32int n;33 cin>>s1;34 cin>>n;35 heap.push(node(s1,n));36 }37 }3839return0;40 }。
病人排队程序设计报告

设计题目:病人看病模拟程序专业班级姓名学号起止时间2009~2010 学年第三学期目录一、课程题目: (3)二、任务分配 (3)三、需求分析 (4)四、概要设计 (4)4.1抽象数据类型定义: (4)4.2 主程序 (5)五、详细设计 (6)六、调试分析 (11)6.1 (11)6.2 (12)6.3 (12)七、用户手册 (13)7.1 说明 (13)7.2 注意事项 (13)八、测试结果 (13)九、参考文献 (14)摘要:在现代化中,信息的收集、管理在工作将发挥越来越重要的作用,能否高效地管理海量信息已成为企事业单位能否高效运行的关键所在。
而利用计算机技术,实现管理系统的自动化、规范化就是最好的解决方法。
针对部分医疗机构就诊排队混乱的问题专门设计了该程序。
本报告主要介绍如何正确使用病人看病模拟程序主,以解决排队看病秩序混乱问题。
本程序功能全面、分类科学。
它集显示、输入、添加、删除等各种处理为一体,信息维护起来非常方便。
关键字:程序;排队就诊;使用说明;一、课程题目:病人排队看病主要重复两件事:(1)病人到达珍室,将病历本交给护士,排队等待队列中候诊;(2)护士从等待队列中取出下一位病人的病历,该病人就诊;要求编程模拟这一过程。
程序采用菜单选择方式,其选项功能说明如下:(1)排队--输入排队病人的病历号,加入到病人排队队列中;(2)就诊--最前面的病人就诊,并从队列中删除;(3)查看队列--从队首到队尾列出所有排队病人病历号;(4)不在排队,余下依次就诊--从队首到队尾列出所有派队病人病历号,退出运行;(5)下班--退出运行;二、任务分配代码编写:程序调试:报告书写:三、需求分析(1)该程序主要是为了方便病人排队就医,解决排队混乱问题而设计;(2)能够实现病人信息的有序管理,插入、删除、显示;(3)操作人员需要手动输入、删除病人序号。
四、概要设计4.1抽象数据类型定义:ADT Queue{数据对象:D={ai | ai∈ ElemSet , i=1,2,…,n, n≥0}数据关系:R1={<ai-1,ai> | ai-1, ai∈D,i=2,…,n}约定其中ai为队列头,an段为队列列尾。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二:病人看病模拟程序一、实验目的1、掌握单链队列存储方式的类型定义,掌握单链队列的基本运算的实现。
2、学会根据应用问题的需要选择合适的数据结构,掌握队列的先进先出运算规则及其在病人看病模拟程序中的应用,理解队列在运算过程中状态的变化。
二、实验内容编写一个程序,反映病人到医院看病排队看医生的情况。
三、需求分析1、运行环境:Windows操作环境,Visual C++6.02、程序应该达到的功能:在病人排队过程中,主要重复两件事:(1)病人到达就诊室,将病历交给护士,排到等待队列中候诊。
(2)护士从等待队列中取出下一位病人的病历,该病人进入入诊室就诊。
要求模拟病人等待就诊这一过程。
程序采用菜单方式,其选项及功能说民如下:(1)排队——输入排队病人的病历号,加入到病人排队队列中。
(2)就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除。
(3)查看排队——从队首到队尾列出所有的排队病人的病历号。
(4)不再排队,余下依次就诊——从队首到队尾列出所有的排队病人的病历号,并退出运行。
(5)下班——退出运行。
四、概要设计1、数据结构的选择考虑到病人排队候诊的过程中具有先排队就诊的特诊,与队列的先进先出的特征相吻合,因此可以考虑采用队列线性表,其中,队列的存储结构有循环顺序队列和单链队列。
考虑到循环顺序队列的插入,删除浪费空间和时间,故采用单链队列,而建立带头结点的单链队列比无头结点的单链队列更简化了插入和删除操作,因此采用带头结点的单链队列。
2、程序的总体结构(1)建立名为“proj3_6”的项目文件,在该项目的管理下完成本程序开发。
在该项目下建立名为“exp3_6.cpp”的源程序文件,文件中主要包括main()和SeeDoctor()两个函数,它们的关系如图1(b)所示。
图1(a ) 图1(b )(2) 程序的主要功能在SeeDoctot()函数中实现,main()函数起到调用SeeDoctor()函数的作用。
五、 详细设计1、 数据结构的类型定义:(1) 链队结点的类型定义typedef struct qnode{int data;struct qnode *next;} QNode;(2) 链队的整体结构定义(3) 链队的整体结构图示qu->rearqu->front 1 2 3qu->rearqu->front ^main SeeDoctorexp3_6.cpp 文件2、main()函数:void main(){seeDoctor();}3、SeeDoctor()函数:模拟病人看病的过程。
病人排队看医生,所以要用到一个队列,这里设计了一个带头结点的单链表作为队列。
六、测试数据及测试结果●void SeeDoctor(){int sel,flag=1,find,no; //flag的初始值为1,一旦下班->>退出系统,则将其置为0,从而结束QuType *qu;QNode *p;qu=(QuType*)malloc(sizeof(QuType));qu->front=qu->rear=(QNode*)malloc(sizeof(QNode));qu->front->next=NULL;while(flag==1){ printf("1:排队2:就诊3:查看排队4:不再排队,余下依次就诊5:下班请选择");scanf("%d",&sel);switch(sel){case 1:完成排队功能;case 2:完成就诊功能;case 3:完成查看排队功能;case 4:完成不再排队,余下依次就诊功能;case 5:完成下班请选择功能;}}●各分支设计如下:➢分支1:排队——输入排队病人的病历号,加入到病人排队队列中。
先检查将要排队病人的病历号是否已经在队列中,若在,则病历号重复,不能完成排队功能,需重新输入;若不在,将其入队。
为此,设计一个do-while语句来判断病历号是否存在队列中,其循环条件:find==1;首先输入病历号,若在,则find=1,继续循环;若不在,find=0,跳出循环,将其入队。
检查将要入队病人的病历号是否存在的关键代码如下:case 1: printf(" >>输入病历号");do{scanf("%d",&no);find=0;p=qu->front;while(p!=NULL&&!find){if(p->data==no)find=1;elsep=p->next;}if(find)printf(" >>输入的病历号重复,重新输入:");}while(find==1); //直到输入一个不在队列中的病号才结束循环p=(QNode*)malloc(sizeof(QNode)); //创建结点p->data=no;p->next=NULL;qu->rear->next=p; qu->rear=p; //将*p结点入队break;➢分支2:就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除。
利用if语句来判断队列是否为空,若空,则输出“没有排队的病人!”;若不空,则输出“病人%d就诊”,最后删除病人%d。
病人就诊关键代码如下:case 2: if (qu->front->next==NULL) /*队空*/printf(" >>没有排队的病人!\n");else /*队不空*/{p=qu->front->next;printf(" >>病人%d就诊\n",p->data);qu->front->next=p->next;free(p);}break;➢分支3:查看排队——从队首到队尾列出所有的排队病人的病历号。
先利用if判断队列是否为空,若空,则输出“没有排队的病人!”;若不空,则利用while循环来依次输出从队首到队尾所有排队病人的病历号。
查看排队关键代码如下:case 3:if(qu->front->next==NULL)printf(" >>没有排队的病人"); //队空else { //队不空p=qu->front->next;printf(" >>排队病人");while(p!=NULL){ printf("%d",p->data);p=p->next;}printf("\n");}break;➢分支4:不再排队,余下依次就诊——从队首到队尾列出所有的排队病人的病历号,并退出运行。
先用if判断队列是否为空,若空,则输出“没有排队的病人!”,find=0,退出循环;若不空,则利用while循环来列出从队首到队尾的所有排队病人的病历号,find=0,退出循环。
不再排队,余下依次就诊关键代码如下:case 4: if(qu->front->next==NULL) //队空printf(" >>没有排队的病人");else { //队不空p=qu->front->next;while(p!=NULL){printf("%d",p->data);p=p->next;}printf("\n");}flag=0;break;➢分支5:下班——退出循环。
若队不空,则输出“余下排队病人请明天就医!”,并将find=0,退出循环。
下班的关键代码如下:case 5: if(qu->front->next!=NULL) //队不空printf(" >>请排队的病人明天就医!");flag=0; /*退出*/break;测试结果:七、使用说明在Visual C++6.0环境下,按下述步骤操作即可:“文件”菜单/打开工作区/选择proj3_6.dsw”,确定/“编译”菜单/执行exp3_6.exe。
八、心得体会九、源程序清单/*文件名:exp3-6.cpp*/#include<stdio.h>#include<malloc.h>typedef struct qnode{int data;struct qnode *next;}QNode; /*链队结点类型*/typedef struct{QNode *front,*rear;}QuType; /*链队类型*/void seeDoctor(){int sel,flag=1,find,no;QuType *qu;QNode *p;qu=(QuType*)malloc(sizeof(QuType)); //创建队列qu->front=qu->rear=(QNode*)malloc(sizeof(QNode));//创建头结点qu->front->next=NULL; //队列为空while(flag==1) /*循环执行*/{ printf("1:排队 2:就诊 3:查看排队 4:不再排队,余下依次就诊 5:下班请选择");scanf("%d",&sel);switch(sel){ case 1: printf(" >>输入病历号");do{scanf("%d",&no);find=0;p=qu->front;while(p!=NULL&&!find){if(p->data==no)find=1;elsep=p->next;}if(find)printf(" >>输入的病历号重复,重新输入:");}while(find==1);//直到输入一个不在队列中的病号才结束循环p=(QNode*)malloc(sizeof(QNode)); //创建结点p->data=no;p->next=NULL;qu->rear->next=p;qu->rear=p; //将*p结点入队break;case 2: if (qu->front->next==NULL) /*队空*/printf(" >>没有排队的病人!\n");else /*队不空*/{p=qu->front->next;printf(" >>病人%d就诊\n",p->data);qu->front->next=p->next;free(p);}break;case 3:if(qu->front->next==NULL) //队空printf(" >>没有排队的病人!\n");else { //队不空p=qu->front->next;printf(" >>排队病人");while(p!=NULL){ printf("%d",p->data);p=p->next;}printf("\n");}break;case 4: if(qu->front->next==NULL) //队空printf(" >>没有排队的病人!\n");else { //队不空p=qu->front->next;printf(" >>病人按以下顺序就诊:");while(p!=NULL){printf("%d",p->data);p=p->next;}printf("\n");}break;case 5:if(qu->front->next!=NULL) //队不空printf(" >>请排队的病人明天就医!\n");flag=0; /*退出*/break;}}}void main(){seeDoctor();}。