病人看病模拟

病人看病模拟

基本功能与要求
编写一个程序,反映病人到医院看病,排队看医生的情况。再病人排队过程中,主要重复两件事:
要求:
(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分钱支持一下,谢谢大家。
在这里插入图片描述

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值