看病排队问题

news2024/11/22 22:07:44

目录

一、代码

二、功能函数介绍

三、运行截图


一、代码

#define  _CRT_SECURE_NO_WARNINGS 1//不用VS删除这一行
#include<stdio.h>
#include<stdlib.h>
struct LinkQueue
{
	int data;
	struct LinkQueue* next;
};

struct Node
{
	LinkQueue* frount;
	LinkQueue* rear;
};

int e;//全局变量,记录患者编号

//取号,入队实现
void EnQueue(LinkQueue& Q, Node& N)
{
	e++;
	LinkQueue* p;
	p = (LinkQueue*)malloc(sizeof(LinkQueue));
	p->data = e;
	N.rear->next = p;
	N.rear = p;
	printf("您是%d号,请耐心候诊!\n", N.rear->data);
}

//医生操作就诊,出队实现
void DeQueue(LinkQueue& Q, Node& N)
{
	LinkQueue* r;
	r = N.frount;
	N.frount = N.frount->next;
	free(r);
	if (N.rear == N.frount)
	{
		N.frount = N.rear;
		printf("目前无病人候诊!\n");
		exit(0);
	}
	else
		printf("请%d号病人就诊,请%d号病人候诊\n", N.frount->data, N.frount->data + 1);
}

//病人查询自己前面还有多少位病人
void PatientQuery(LinkQueue& Q, Node& N)
{
	int i;
	printf("请输入您是几号病人:");
	scanf("%d", &i);
	N.rear->data = i;
	if (N.rear->data == 1)
		printf("您是1号,请尽快就诊!\n");
	else
		printf("在您前面还有%d位病人\n", N.rear->data - N.frount->data - 1);
}

//医生查询还需诊断的人数
void DoctorQuery(LinkQueue& Q, Node& N)
{
	printf("您还需要诊断%d位病人\n", N.rear->data - N.frount->data);
}

//菜单
void menu(void)
{
	printf("***************************************************\n");
	printf("******           请输入您的选择             *******\n");
	printf("******            1 ---- 取号               *******\n");
	printf("******            2 ---- 就诊(医生操作)     *******\n");
	printf("******     3 ---- 查看候诊人数(医生操作)    *******\n");
	printf("******    4 ---- 查看您前面还有多少位病人   *******\n");
	printf("***************************************************\n");
}

//主函数
int main(void)
{
	LinkQueue Q;
	Node N;
	LinkQueue* q;
	q = (LinkQueue*)malloc(sizeof(LinkQueue));
	q->next = NULL;
	q->data = 0;
	N.frount = N.rear = q;
	N.frount->data = N.rear->data = q->data;
	//以上为初始化链队列
	menu();
	while (1)
	{
		int choice;
		printf("\n请输入选择:");
		scanf("%d", &choice);
		switch (choice)
		{
		case 1:
			EnQueue(Q, N);
			break;
		case 2:
			DeQueue(Q, N);
			break;
		case 3:
			DoctorQuery(Q, N);
			break;
		case 4:
			PatientQuery(Q, N);
			break;
		}
	}
	return 0;
}

二、功能函数介绍

1. EnQueue 函数:实现患者取号并入队操作,每次取号增加全局变量 e 值,将其赋给新的 LinkQueue 结构体指针 p 的 data 成员,然后将其插入到链队列的尾部(rear 指针所指向节点的 next 指针),并打印出患者所得到的编号。

//取号,入队实现
void EnQueue(LinkQueue& Q, Node& N)
{
	e++;
	LinkQueue* p;
	p = (LinkQueue*)malloc(sizeof(LinkQueue));
	p->data = e;
	N.rear->next = p;
	N.rear = p;
	printf("您是%d号,请耐心候诊!\n", N.rear->data);
}

2. DeQueue 函数:实现医生查看患者信息、就诊操作,并从链队列头部(front 指针所指向节点)删除该患者信息。如果链队列为空,则输出提示信息并退出程序;否则输出目前行列头部患者信息和下一个等待就诊的患者信息。

//医生操作就诊,出队实现
void DeQueue(LinkQueue& Q, Node& N)
{
	LinkQueue* r;
	r = N.frount;
	N.frount = N.frount->next;
	free(r);
	if (N.rear == N.frount)
	{
		N.frount = N.rear;
		printf("目前无病人候诊!\n");
		exit(0);
	}
	else
		printf("请%d号病人就诊,请%d号病人候诊\n", N.frount->data, N.frount->data + 1);
}

3. PatientQuery 函数: 这个函数可用于查询一个患者在队列中的位置。它接收输入的患者编号,计算该患者前面有多少个患者,然后将这些信息显示给患者。

//病人查询自己前面还有多少位病人
void PatientQuery(LinkQueue& Q, Node& N)
{
	int i;
	printf("请输入您是几号病人:");
	scanf("%d", &i);
	N.rear->data = i;
	if (N.rear->data == 1)
		printf("您是1号,请尽快就诊!\n");
	else
		printf("在您前面还有%d位病人\n", N.rear->data - N.frount->data - 1);
}

4. DoctorQuery 函数: 这个函数用于为医生显示队列中还有多少个患者需要就诊。它计算队列中的患者数量,队尾数据域减对头数据域即可,然后显示结果。

//医生查询还需诊断的人数
void DoctorQuery(LinkQueue& Q, Node& N)
{
	printf("您还需要诊断%d位病人\n", N.rear->data - N.frount->data);
}

5. main() 函数:main函数中包含了初始化链队列,此时N.frount和N.rear的数据域都等于1。使用 menu() 函数打印主菜单,然后通过 while 循环等待用户的输入,根据用户输入调用相应的功能函数产生操作,并重复上述流程直到用户选择退出。

//主函数
int main(void)
{
	LinkQueue Q;
	Node N;
	LinkQueue* q;
	q = (LinkQueue*)malloc(sizeof(LinkQueue));
	q->next = NULL;
	q->data = 0;
	N.frount = N.rear = q;
	N.frount->data = N.rear->data = q->data;
	//以上为初始化链队列
	menu();
	while (1)
	{
		int choice;
		printf("\n请输入选择:");
		scanf("%d", &choice);
		switch (choice)
		{
		case 1:
			EnQueue(Q, N);
			break;
		case 2:
			DeQueue(Q, N);
			break;
		case 3:
			DoctorQuery(Q, N);
			break;
		case 4:
			PatientQuery(Q, N);
			break;
		}
	}
	return 0;
}

三、运行截图

1.取号 

2.就诊

 

3.医生查询、病人查询

4.功能复合

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/643307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker无法启动 -> 缺少libseccomp

systemctl status docker.servicejournalctl -u dockeryum install -y libseccomplibseccomp是一个用于Linux操作系统的安全计算模式&#xff08;seccomp&#xff09;的用户空间库。seccomp是一种Linux内核特性&#xff0c;允许限制进程可以执行的系统调用&#xff0c;以增加应…

C语言中的基本数据类型

C语言中的基本数据类型分别为以下几种 整型、浮点型、字符类型 整型又分为整型int、短整型short、长整型long 浮点型分为单精度浮点型float、双精度浮点型double 1、短整型short 2.整型 3.长整型 短整型、长整型、整形都是表示整形的&#xff0c;并且输出结果也都为10&…

教你如何批量关闭窗口,省时又省力!

哈喽哈喽&#xff0c;大家好&#xff0c;今天我们来分享一个小功能。 在实际的应用场景中&#xff0c;我们可能需要打开多个窗口&#xff0c;在关闭窗口时&#xff0c;逐个关闭窗口可能比较繁琐&#xff0c;而且有些窗口虽然不再显示了&#xff0c;但可能是隐藏的。在这种情况…

Flutter 库:强大的工具及扩展——nb_utils

Flutter 库&#xff1a;强大的工具及扩展——nb_utils 文章目录 Flutter 库&#xff1a;强大的工具及扩展——nb_utils一、概述1、简介2、功能3、官方资料 二、基本使用1、安装2、基本使用第一步&#xff1a;在 main.dart 中初始化第二步&#xff1a;在您的 MaterialApp 或 Cup…

java的字符输入流

字符流的底层也是字节流。字符流字节流字符集。 特点是输入流一次读一个字节&#xff0c;遇到中文时&#xff0c;一次读多个字节&#xff08;读多少个与字符集有关&#xff09;&#xff1b;输出流底层会把数据按照指定的编码方式进行编码&#xff0c;变成字节再写到文件中。 字…

15个提效的设计类AI生成工具推荐

最近越来越多的AI工具如雨后春笋般涌现。我相信很多设计师会开始使用人工智能工具来帮助我们提高工作效率。 本文整理了15种易于使用的设计类AI工具 即时 AI 即时 AI 是通过自然语言描述&#xff0c;快速生成可编辑的 UI 设计稿的设计工具。 输入文字描述后&#xff0c;即可…

C语言:使用函数完成整型数组的打印、元素逆置、初始化

题目&#xff1a; 创建一个整形数组&#xff0c;完成对数组的操作 1. 实现 函数init() -- 初始化数组为全0 2. 实现 函数print() -- 打印数组的每个元素 3. 实现 函数reverse() -- 函数完成数组元素的逆置 要求&#xff1a;自己设计以上函数的参数&#xff0c;返回值。 思路&a…

AB32VG1:SDK_AB53XX_V061(4)蓝牙音频测试笔记

文章目录 1. 淘宝上两种开发板&#xff0c;有一种的蓝牙功能不正常2. 蓝牙音频测试2.1 《config.h》和《Boombox.setting》两个配置以哪个为准2.2 codeblocks更换链接库2.2.1 这样进入build options是错的2.2.2 build options正确打开方式 2.3.编译工程&#xff0c;下载运行2.3…

kafka 报错 - Cannot assign requested address

背景 在华为云服务器上跑了 zookeeper 和 kafka 的 broker&#xff0c;想内外网分流&#xff0c;重点就是做不到从外网去消费&#xff0c;比如用自己的 windows 笔记本去消费。 配置 server.properties 的 listener 为 broker 所在机子的的内网 IP 后&#xff0c;终于能 star…

Scala环境搭建及安装

salca环境搭建 由于scala是基于java来开发的, 编写的java类可以使用javac命令编译成.class文件被JVM加载到内存中执行 ! 那么scala可以通过scalac命令将编写的scala文件编译成.class文件一样被JVM加载到内存中,因此Scala是运行在JVM平台上的&#xff0c;所以安装Scala之前要安装…

【SpringBoot实战专题】「开发实战系列」全方位攻克你的技术盲区之SpringBoot整合众多日志管理系统服务starter-logging

全方位攻克你的技术盲区之SpringBoot整合众多日志管理系统服务starter-logging 前提介绍Spring默认日志文件Spring的日志配置参数logging.levelmaven配置properties文件yaml文件 logging.fileapplication.yml中配置 logging.pathapplication.properties配置application.yml配置…

基于DBACAN的道路轨迹点聚类

目录 前言道路栅格化轨迹聚类参考资料 前言 很多针对道路轨迹的挖掘项目前期都需要对道路进行一段一段的分割成路段&#xff0c;然后对每一个路段来单独进行考察&#xff0c;如设定路段限速标识&#xff0c;超速概率等&#xff0c;如何对道路进行划分&#xff0c;其实是一个很…

华为OD机试真题 JavaScript 实现【滑动窗口】【2023 B卷 100分】,附详细解题思路

一、题目描述 有一个N个整数的数组&#xff0c;和一个长度为M的窗口&#xff0c;窗口从数组内的第一个数开始滑动直到窗口不能滑动为止&#xff0c;每次窗口滑动产生一个窗口和&#xff08;窗口内所有数和和&#xff09;&#xff0c;求窗口滑动产生的所有窗口和的最大值。 二…

python: read excel

""" Insurance。py edit&#xff1a; geovindu,Geovin Du,涂聚文 date 2023-06-13 保险类 """import sys import osclass Insurance:"""保险类"""def __init__(self, InsuranceName, InsuranceCost, IMonth):&quo…

STM32使用QUADSPI读写外部Nor Flash(以W25Q64为例)

使用QUADSPI读写W25Q64 QUADSPI介绍硬件连接双闪存模式禁止双闪存模式使能 QUADSPI命令序列指令阶段地址阶段交替字节阶段空指令周期阶段数据阶段 QUADSPI主要信号接口协议模式单线SPI模式双线SPI模式四线SPI模式 使用QUADSPI操作W25Q64发送命令函数状态轮询函数读ID函数QUADSP…

应用案例 | FG-200:通过Modbus将FF H1设备集成到DCS系统

一 背景 FOUNDATION Fieldbus&#xff08;FF&#xff09;协议是一种现代化的数字通信协议&#xff0c;其中FF H1协议在大型的化工、电力、石油等流程工业领域得到了广泛应用。由于FF H1协议具有诸多优势&#xff0c;例如高度可靠性、高速数据传输、强大的诊断能力和灵活的设备…

第4章 总体设计

文章目录 第5章 总体设计5.1 设计过程例题 5.2 设计原理5.2.1 模块化模块化的优势 例题5.2.2 抽象5.2.3 逐步求精求精实际上是细化的过程与抽象的关系 5.2.4 信息隐藏和局部化5.2.5 模块独立模块独立的重要性模块独立的定性标准度量耦合① 无直接耦合② 数据耦合③ 标记耦合④ …

MySQL数据库基础 11

第十一章 数据处理之增删改 1. 插入数据1.1 实际问题1.2 方式1&#xff1a;VALUES的方式添加1.3 方式2&#xff1a;将查询结果插入到表中 2. 更新数据3. 删除数据4. MySQL8新特性&#xff1a;计算列 1. 插入数据 1.1 实际问题 解决方式&#xff1a;使用 INSERT 语句向表中插入…

8.1 正弦波振荡电路(2)

四、石英晶体正弦波振荡电路 石英晶体谐振器&#xff0c;简称石英晶体&#xff0c;具有非常稳定的固有频率。对于振荡频率稳定性要求高的电路&#xff0c;应选用石英晶体作选频网络。 1、石英晶体的特点 将二氧化硅&#xff08; SiO 2 \,\textrm {SiO}_2\, SiO2​&#xff0…