数据结构:利用队列的基本操作,模拟病人到医院排队看病过程。

一:要求:

病人到医院排队看病,在排队过程中,主要重复以下两件事情:

  1. 病人到达诊室,将病历本交给护士,在等待队列中候诊。

  2. 护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。

要求编程模拟这个过程。

二:代码

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
typedef int  QElemType;
typedef struct QNode
{
	QElemType data;
	struct QNode* next;
}QNode, * QueuePtr;
typedef struct
{
	QueuePtr front;
	QueuePtr rear;
}LinkQueue;
void init(LinkQueue& q)
{
	q.front = new QNode;
	q.front->next = nullptr;
	q.rear = q.front;
	
}
void push(LinkQueue& q, QElemType x)
{
	QueuePtr p = new QNode;
	p->data = x;
	p->next = nullptr;
		q.rear->next = p;
		q.rear = p;
	
}
void pop(LinkQueue& q, QElemType& e)
{
	e = 0;
	QueuePtr p;
	if (q.rear == q.front) {
		cout << "已空" << endl; return;
	}
	p = q.front->next;
	e = p->data;
	q.front->next = p->next;
	if (p == q.rear)
		q.rear = q.front;
	delete p;

}
bool empty(LinkQueue& q)
{
	return q.front == q.rear;
}
QElemType gettop(LinkQueue& q)
{
	if (empty(q)) {
		cout << "已空" << endl; return -1;
	}
	else return  q.front->next->data;
}
void clear(LinkQueue& q)
{
	while (q.front->next)
	{
		QueuePtr p = q.front->next;
		q.front->next = p->next;
		delete p;
	}
	q.rear = q.front;
}
void destroy(LinkQueue& q)
{
	while (q.front)
	{
		q.rear = q.front->next;
		delete q.front;
		q.front = q.rear;

	}
}
void display(LinkQueue& q)
{   if(empty(q)) { cout << "已空" << endl; return; }
	QueuePtr  p= q.front->next;
	
	while (p)
	{
		cout << p->data; cout << " ";
		p = p->next;
	}
}
int check(LinkQueue& q, int id)
{
	if (empty(q)) {  return 0; }
	QueuePtr  p = q.front->next;
	while (p)
	{
		if (p->data == id) return 1;
		p = p->next;
	}
	return 0;
}

void see()
{
	LinkQueue q;
	init(q);
	
	int n; int flag = 1;
	
	while (flag) {
		cout << "1:排队 2:就诊 3:查看排队 4:下班 请选择:";
		cin >> n;
		switch (n)
		{
		case 1: 
			cout << "请输入病历号";
			int id;
			cin >> id;
			if (check(q, id) == 1) {
				cout << "病历号重复,请重新输入";
				cin >> id;
			}
			push(q, id);
			break;
			
	case 2:  int e;
		pop(q, e);
		if (e == 0) cout << "没有排队的病人" << endl;
		else cout << e << "病人请就诊"<<endl; break;
		
case 3: 
	cout << "排队的病人"; display(q);  cout << endl; break;
	
case 4: 
	cout << "请以下排队的病人下午就诊:"; display(q); flag = 0; cout << endl;
	cout << "下班";
      break;
       
		default:break;
		}
	}
}
int main()
{
	
	
	see();

	return 0;
}

这里就一个see()函数和check()是特意实现的,其他都是队列正常操作。

三:运行结果

相关推荐
東隅已逝,桑榆非晚4 分钟前
深⼊理解指针(3)
c语言·数据结构·笔记·算法·排序算法
云小逸5 分钟前
【Codex 使用教程:从项目规则、Skills、Rules 到 Hooks】
c++·人工智能·ai·codex
li星野6 分钟前
二叉树十题通关:从层序遍历到序列化(Python + C++)
开发语言·c++·python·学习
地平线开发者7 分钟前
地平线 征程 6 工具链进阶教程 征程 6E/M 工具链 QAT 精度调优
算法·自动驾驶
王老师青少年编程8 分钟前
csp信奥赛C++高频考点专项训练之字符串 --【回文字符串】:最大回文数
c++·字符串·csp·高频考点·信奥赛·回文字符串·最大回文数
邪修king1 小时前
UE5 进阶篇第一弹:中期架构升级 —— 组件化开发与 Gameplay 框架实战
c++·游戏·架构·ue5
小O的算法实验室2 小时前
2025年IEEE TETCI,异构无人机取送货问题中的转运优化,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
chao1898449 小时前
基于 SPEA2 的多目标优化算法 MATLAB 实现
开发语言·算法·matlab
沪漂阿龙9 小时前
AI大模型面试题:支持向量机是什么?间隔最大化、软间隔、核函数、LinearSVC 全面拆解
人工智能·算法·支持向量机
難釋懷9 小时前
Redis数据结构-Set结构
数据结构·redis·bootstrap