病人看病模拟
基本功能与要求
编写一个程序,反映病人到医院看病,排队看医生的情况。再病人排队过程中,主要重复两件事:
要求:
(1)排队-输入排队病人的挂号号码,加入到病人排队队列中;
(2)就诊-排在病人排队队列中最前面的病人就诊,并将其从队列中删除;
(3)查看排队-从队首到队尾列出所有的排队病人的挂号号码;
(4)查询-在队列中查询某个号码前还有几位病人。
(5)下班-退出运行。
本文为博主原创文章,未经博主允许不得转载。
版权为陈博超所有,第一次于2021年07月4日发表于BLOG上
本BLOG上原创文章未经本人许可,不得用于商业用途。转载请经允许后注明出处,否则保留追究法律责任的权利。
*
先用链表实现队列储存在SeqCQueue.h文件中
代码如下:
#include<stdio.h>
#include<malloc.h>
typedef int DataType;
//链表实现队列
typedef struct qnode
{
DataType data;
struct qnode* next;
}LQNode;
typedef struct
{
LQNode * front; //队头指针
LQNode * rear; //队尾指针
}LQueue;
//初始化
void QueueInitiate(LQueue* Q) //初始化链式队列
{
Q->rear = NULL; //定义初始队列队尾指针下标值
Q->front = NULL; //定义初始队列队头指针下标值
}
//非空否
int QueueNotEmpty(LQueue Q)
{
if (Q.front == NULL) return 0;
else return 1;
}
//入队列
void QueueAppend(LQueue* Q, DataType x)
{
LQNode *p;
p = (LQNode *)malloc(sizeof(LQNode));
p->data = x;
p->next = NULL;
if (Q->rear != NULL)Q->rear->next = p;
Q->rear = p;
if (Q->front == NULL)Q->front = p;
}
//出队列
int QueueDelete(LQueue* Q, DataType *d)
{
LQNode* p;
if (Q->front == NULL)
{
printf("队列已空无数据元素出队列!\n");
return 0;
}
else
{
*d = Q->front->data;
p = Q->front;
Q->front = Q->front->next;
if (Q->front == NULL)Q->rear = NULL;
free(p);
return 1;
}
}
//取队头数据元素
int QueueGet(LQueue* Q, DataType* d)
{
if (Q->front == NULL)
{
printf("队列已空无数据元素出队列!\n");
return 0;
}
else
{
*d = Q->front->data;
return 1;
}
}
//撤销动态申请空间
void Destroy(LQueue Q)
{
LQNode* p, * p1;
p = Q.front;
while (p != NULL)
{
p1 = p;
p = p->next;
free(p1);
}
}
主程序如下:
#include<stdio.h>
#include"SeqCQueue.h"
int main()
{
int b, d, m,stop=0;
char x,c;
int count = 0;
LQNode* p, *q;
LQueue Q;
QueueInitiate(&Q); //初始化队列
printf("请输入病人的挂号号码:\n");
scanf("%d", &b);
for (int i = 1; i <= b; i++) //挂号
{
QueueAppend(&Q, i);
}
printf("--------------------------------------------------\n");
printf("功能列表:\n");
printf("a、就诊\n");
printf("b、查看排队\n");
printf("c、查询\n");
printf("d、下班\n");
printf("--------------------------------------------------\n");
while (stop!=1)
{
while ((c = getchar()) != '\n');
printf("请输入选择的功能:\n");
scanf("%c",&x);
switch (x)
{
case 'a':
QueueDelete(&Q, &d);
printf("就诊成功!\n");
break;
case 'b':
p = (LQNode*)malloc(sizeof(LQNode));
p = Q.front;
printf("该病人排队队列为:\n");
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
break;
case 'c':
printf("请输入需要查询的号码\n");
scanf("%d", &m);
q = (LQNode*)malloc(sizeof(LQNode));
q = Q.front;
while (q != NULL && q->data != m)
{
q = q->next;
count++;
}
if (q == NULL)
{
printf("未找到该号码!\n");
}
else
{
printf("该号码前面还有%d名病人 \n", count);
count = 0;
}
break;
case 'd':
printf("下班,退出运行!\n");
stop = 1;
break;
}
printf("--------------------------------------------------\n");
}
return 0;
}
运行截图如下:
码字不易,穷酸学生,各位老板打赏个1分钱支持一下,谢谢大家。