用链队实现病人到医院看病的过程
发布时间
阅读量:
阅读量

目录
1、创建LQueue.cpp文件
2.创建experiment.cpp文件
3.运行效果
1、创建LQueue.cpp文件
#include <stdio.h>
#include <malloc.h>
#include <string.h>
//定义链队的数据结点
typedef struct Lnode
{
//存放患者姓名
char data[10];
//指针域
struct Lnode * next;
//病人链队结点
}QType;
//定义病人链队结点
typedef struct
{
//指向队头病人结点
QType * front;
//指向队尾病人结点
QType * rear;
//链队中结点类型
}LQueue;
//初始化队列
void InitQueue(LQueue * &lq)
{
lq=(LQueue *)malloc(sizeof(LQueue));
//初始时队头和队尾指针都为空
lq->rear=lq->front=NULL;
}
//销毁链队
void DestroyQueue(LQueue * &lq)
{
QType * pre=lq->front,* p;
//非空队的情况
if(pre!=NULL)
{
//只有一个 数据结点的情况
if(pre==lq->rear)
//释放pre结点
free(pre);
//有两个或者多个 数据结点的情况
else
{
p=pre->next;
while(p!=NULL)
{
//释放pre结点
free(pre);
//pre、p同步后移
pre=p;
p=p->next;
}
}
//释放尾结点
free(pre);
}
//释放链队结点
free(lq);
}
//进队
void EnQueue(LQueue * &lq,char x[])
{
QType * s;
//创建新结点,插入到链队的尾
s=(QType *)malloc(sizeof(QType));
strcpy(s->data,x);
s->next=NULL;
//原队为空 队的情况
if(lq->front==NULL)
//front和rear都指向s结点
lq->rear=lq->front=s;
//原队不为空的情况
else
{
//将结点s链到队尾
lq->rear->next=s;
//rear指向结点s
lq->rear=s;
}
}
//出队
int DeQueue(LQueue * &lq,char x[])
{
QType * p;
//原队为空 队的情况
if(lq->front==NULL)
return 0;
//p指向队头结点
p=lq->front;
//取队头元素值
strcpy(x,p->data);
//若原队列中只有一个结点,删除后队列变空
if(lq->rear==lq->front)
lq->rear=lq->front=NULL;
//有两个或者多个 数据结点的情况
else
lq->front=lq->front->next;
free(p);
return 1;
}
//判断队空
int QueueEmpty(LQueue * lq)
{
if(lq->front==NULL)
//队空返回1
return 1;
else
//队不空返回0
return 0;
}
//输出队中所有元素
int DispQueue(LQueue * lq)
{
QType * p;
if(QueueEmpty(lq))
//队空返回0
return 0;
else
{
p=lq->front;
while(p!=NULL)
{
printf("%s ",p->data);
p=p->next;
}
printf("\n");
//队不空返回1
return 1;
}
}
代码解读
2.创建experiment.cpp文件
#include "LQueue.cpp"
int main()
{
int sel,flag=1;
char name[10];
//定义一个病人队列
LQueue * lq;
//初始化病人队列
InitQueue(lq);
//没有下班时循环执行
while(flag==1)
{
printf("1:排队 2:看医生 3:查看排队 0:下班 请选择:");
//选择一个操作
scanf("%d",&sel);
switch(sel)
{
//医生下班
case 0:
if(!QueueEmpty(lq))
printf(">>请排队的患者明天就医\n");
DestroyQueue(lq);
flag=0;
break;
case 1:
printf(">>请输入患者姓名:");
scanf("%s",name);
EnQueue(lq,name);
break;
case 2:
if(!DeQueue(lq,name))
printf(">>没有排队的患者\n");
else
printf(">>患者%s看医生\n",name);
break;
//查看病人排队情况
case 3:
printf(">>排队患者:");
if(!DispQueue(lq))
printf(">>没有排队的患者 \n");
break;
}
}
}
代码解读
3.运行效果

全部评论 (0)
还没有任何评论哟~
