问题阐述:
患者医院看病过程:先排队等候,再看病治疗。在排队的过程中主要重复做两件事情,一是患者到达诊室时,将病历交给护士,排到等候队列中候诊;二是护士从等候队列中取出下一个患者的病历,该患者进入诊室看病。 按照“先到先服务”的原则,设计一个算法模拟病人等候就诊的过程。其中“病人到达”用命令a表示,“护士让下一位患者就诊”用命令n表示,“不再接受病人排队”用命令q表示。
算法思想:
在排队中按照“先到先服务”的原则,设计一个算法模拟病人等候就诊的过程。其中“病人到达”用a表示,“护士让下一位患者就诊”用命令n表示,“不在接受病人排队”用q表示。
本算法采用链队存放患者的病历号:
①当有“病人到达”命令时,则入队。
②当有“护士让下一位患者就诊”命令时,则出队。
③当有:“不在接受病人排队”命令时,则队列中的所有元素出队,程序终止。
不多说,直接上代码!
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>
typedef int QElemType;
int ch,n;
typedef struct QNode
{
QElemType data;
struct QNode *next;
}Qnode, *QueuePtr;
typedef struct
{
QueuePtr front;//队头指针
QueuePtr rear; //队尾指针
}LinkQueue;
LinkQueue Q;
/*********************各个子函数的定义*********************/
void InitQueue(LinkQueue &Q);//初始化队列
bool IsEmpty(LinkQueue &Q);//判断是否为空
void EnQueue(LinkQueue &Q, QElemType &e);//入队
void DeQueue(LinkQueue &Q, QElemType &e);//出队
void SeeDoctor();//模拟看病
int main()
{
cout<<"欲模拟病人排队就诊过程!!!"<<endl;
cout<<"其中病人到达用命令a表示,护士让下一位患者就诊用命令n表示,不再接受病人排队用命令q表示."<<endl;
SeeDoctor();
return 0;
}
/*********************各个子函数功能的实现*********************/
//初始化队列
void InitQueue(LinkQueue &Q){
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
Q.front->next = NULL;
}
//判断是否为空
bool IsEmpty(LinkQueue &Q){
if (Q.front == Q.rear) return true;
return false;
}
//入队
void EnQueue(LinkQueue &Q, QElemType &e){
Qnode *p;
p = (QueuePtr)malloc(sizeof(QNode));
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
}
//出队
void DeQueue(LinkQueue &Q, QElemType &e){
Qnode *p;
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p)
Q.rear = Q.front;
free(p);
}
//模拟看病
void SeeDoctor(){
InitQueue(Q);//初始化队列Q
int flag=1;
while(flag)
{
printf("\n请输入命令:");
ch=getch();
switch(ch){
case 'a':printf("\n病历号:");
cin>>n;
EnQueue(Q,n);
break;
case 'n':if(!IsEmpty(Q))
{
DeQueue(Q,n);
printf("\n病历号为%d的病人就诊",n);
}
else
printf("\n无病人等候就诊");
break;
case 'q':cout<<"\n今天停止挂号,下列病人依次就诊:\n";
while(!IsEmpty(Q))
{
DeQueue(Q,n);
printf("%d\n",n);
}
flag=0;
break;
default:printf("\n非法命令!");
}
}
}
执行效果(模拟两种情况):
分享完毕~
版权声明:本文为Jesonary原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。