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

一:要求:

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

  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()是特意实现的,其他都是队列正常操作。

三:运行结果

相关推荐
anew___3 分钟前
蜂鸣器播放音乐——让 Arduino 唱出旋律
c++·stm32·单片机·嵌入式硬件·c
吞下星星的少年·-·5 分钟前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
stolentime1 小时前
洛谷P10515 转圈题解
c++·算法·数学建模·贪心算法
tdtsmt2 小时前
穿戴硬件量产工艺实录:天地通电子智能手表主板 SMT 贴片案
c++
和裕2 小时前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
衡石科技3 小时前
Data_Agent记忆机制与经验复用衡石分析智能体会话记忆与长期学习技术解析
人工智能·科技·学习·算法·企业级bi
Msshu1234 小时前
2~5串锂电快充优选|XSP36 Type‑C升压/升降压快充管理芯片
数据结构·随机森林·贪心算法·排序算法·线性回归·启发式算法
shirsl4 小时前
算法 Day 2 滑动窗口 + 栈 / 单调栈
开发语言·python·算法
土司大王5 小时前
LeetCode hot100 回溯专题总结:Java 通用模板、决策树模型
java·算法·leetcode·决策树
2601_962218615 小时前
万象生鲜系统订单全生命周期状态同步技术实现业务可视
大数据·数据库·人工智能·python·算法