★观前提示:本篇内容为数据结构实验,代码内容经测试没有问题,但是可能会不符合每个人实验的要求,因此以下内容建议仅做思路参考。
一、实验目的
掌握栈与队列的基本结构和操作方法,并能利用其解决实际问题。
二、实验要求
1️⃣实验背景
编写一个程序,反映病人到医院看病排队看医生的情况,在病人排队过程中,主要重复两件事:
①病人到达诊室,将病历交给护士,,排到等待队列中侯诊
②护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊
2️⃣实验要求
模拟病人等待就诊这一过程,程序采用菜单式,其选项和功能说明如下:
- ①排队↔输入排队病人的病历号,加入到病人排队队列中
- ②就诊↔病人排队队列中最前面的病人就诊,将其从队列中删除
- ③查看排队↔从队首到队尾理出所有的排队病人的病历号
- ④不在排队,余下依次就诊↔从队首到队尾列出所有的排队病人的病历号,并退出运行
- ⑤下班↔退出运行
- ⑥上班↔初始化排队队列
★温馨提示:以下代码均为改正过的代码,皆已经过测试。
三、源码实现
#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,*q;
qu=(QuType *)malloc(sizeof(QuType)); /*创建空队*/
qu->front=qu->rear=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;
else
p=p->next;
}
if (find)
printf(" >>输入的病历号重复,重新输入:");
}
while (find==1);
p=(QNode *)malloc(sizeof(QNode)); /*创建结点*/
p->data=no;
p->next=NULL;
if (qu->rear==NULL) /*第一个病人排队*/
{
qu->front=qu->rear=p;
}
else
{
qu->rear->next=p;
qu->rear=p; /*将*p结点入队*/
}
break;
case 2:
if (qu->front==NULL) /*队空*/
printf(" >>没有排队的病人!\n");
else /*队不空*/
{
p=qu->front;
printf(" >>病人%d就诊\n",p->data);
if (qu->rear==p) /*只有一个病人排队的情况*/
{
qu->front=qu->rear=NULL;
}
else
qu->front=p->next;
free(p);
}
break;
case 3:
if (qu->front==NULL) /*队空*/
printf(" >>没有排列的病人!\n");
else /*队不空*/
{
p=qu->front;
printf(" >>排队病人:");
while (p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
break;
case 4:
if (qu->front==NULL) /*队空*/
printf(" >>没有排列的病人!\n");
else /*队不空*/
{
p=qu->front;
printf(" >>病人按以下顺序就诊:");
while (p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
flag=0; /*退出*/
break;
case 5:
if (qu->front!=NULL) /*队不空*/
printf(" >>请排队的病人明天就医!\n");
flag=0; /*退出*/
break;
}
}
p=qu->front; //销毁队列
while (p!=NULL)
{
q = p->next;
free(p);
p = q;
}
}
//主函数
int main()
{
SeeDoctor();//调用病人看病函数
return 0;
}
四、实验总结
① 通过本次实验,掌握了栈与队列的基本结构与操作方法; ② 通过多次尝试对栈和队列的代码实现,最终成功地解决了这两个应用类问题。 ③ 明白了栈和队列的在这两题应用中体现的逻辑,掌握了栈和队列的一些基本操作如:初始化入栈、出栈、入队、出队等;
2022.5.21记录:Code_流苏 如有任何疑问,评论回复,看到即回,欢迎大家多多交流学习! ★以上实验内容仅供参考。