【数据结构 C描述】编制一个病人看病模拟程序。(使用顺序队列实现)

版权声明:AlanLee版权所有 https://blog.csdn.net/qq1445654576/article/details/83510898

编制一个病人看病模拟程序。
在病人排队过程中,主要重复两件事:
1.病人到达诊室,将病历本交给护士,排到等待队列中候诊。
2.护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。
在这里插入图片描述

在这里插入图片描述

//main.cpp
#include <iostream>
#include <Windows.h>
#include "SqQueue.h"

using namespace std;

int main()
{
	/*
	//测试队列是否可用
	void testSqQueue();
	testSqQueue();
	*/


	//护士给病人看病
	void nurse();
	nurse();
	
	cout << endl;
	system("pause");
	return 0;
}


//护士给病人看病
void nurse() {
	SqQueue *Sq;
	InitSqQueue(Sq);
	SqElemType ElemToSq = 0;		//存放进队时的元素
	SqElemType saveOutElem = 0;		//存放出队时的元素
	int arr[] = { 1,2,3,4,5 };
	int arrLength = sizeof(arr) / sizeof(int);
	int menuNum = 0;			//存放菜单编号的变量
	int patientNum = 0;			//存放病历号的变量
	cout << "编制一个护士看病模拟程序。\n";
	while (menuNum != 4) {
		cout << "\n\n\n==========菜单==========\n";
		cout << "\t1.排队"
			<< "\n\t2.就诊"
			<< "\n\t3.查看排队"
			<< "\n\t4.下班(退出程序)"
			<< "\n========================\n";
		cout << "\n选择菜单,请输入菜单编号:";
		
		cin >> menuNum;
		switch (menuNum)
		{
		case 1:
			//进队
			cout << "\n请输入病历号:";
			cin >> patientNum;
			enSqQueue(Sq, patientNum);		//将病历号放入队列中
			cout << "\n进队成功。\n";		//提示语句

			arrLength = SqQueueLength(Sq);	//获取当前队列的长度
			cout << "\n当前排队情况为:";
			DisplaySqQueue(Sq, arrLength);	//显示当前队列中的元素
			break;
		case 2:
			//出队
			if (SqQueueEmpty(Sq)) {			//如果队空,则无法出队
				cout << "当前没有人在排队!";
				continue;					//结束当前循环
			}
			cout << "当前出队就诊的号数为:";
			deSqQueue(Sq, saveOutElem);
			cout << saveOutElem << "号 ";
			cout << "\n出队成功。";
			break;
		case 3:
			//查看队列
			if (SqQueueEmpty(Sq)) {			//如果队空,则无法出队
				cout << "当前没有人在排队!";
				continue;					//结束当前循环
			}
			cout << "\n查看队列:";
			DisplaySqQueue(Sq, arrLength);		//查看队列元素
			break;
		case 4:
			cout << "\n护士姐姐要下班咯~ (O▽O)~\n";
			Sleep(2000);			//控制下一条语句的时间,2s后执行下一条语句
			exit(0);				//2s后退出程序
			break;
		default:
			cout << "输入的菜单编号错误,请重新输入!";
			break;
		}
	}
	DestorySqQueue(Sq);
}

//测试队列是否可用
void testSqQueue() {
	SqQueue *Sq;
	int arrTest[5] = { 1,2,3,4,5 };
	int arrLength = sizeof(arrTest) / sizeof(int);
	InitSqQueue(Sq);
	cout << "开始入队:";
	for (int i = 0; i < arrLength; i++) {
		enSqQueue(Sq, arrTest[i]);		//将数组中的元素全部入队
		cout << arrTest[i] << " ";		//显示入队的元素
	}
	cout << "\n出队后的数字:";
	DisplaySqQueue(Sq, arrLength);

	cout << "\n当前队列的长度为:" << SqQueueLength(Sq);

	DestorySqQueue(Sq);
}

//SqQueue.h
#include <iostream>
#include <malloc.h>
#define Maxsize 50
using namespace std;

typedef int SqElemType;
typedef struct {
	SqElemType data[Maxsize];
	int front;
	int rear;
}SqQueue;

void InitSqQueue(SqQueue *&Sq) {
	Sq = (SqQueue *)malloc(sizeof(SqQueue));
	Sq->front = Sq->rear = -1;		//初始时将队头队尾都置为 -1
}

void DestorySqQueue(SqQueue *&Sq) {
	free(Sq);
}

bool SqQueueEmpty(SqQueue *&Sq) {
	return Sq->front == Sq->rear;		//队头等于队尾时,队列为空
}

bool SqQueueFull(SqQueue *Sq) {
	return Sq->rear == Maxsize - 1;		//队尾等于数组最大下标时,队列为满
}

bool enSqQueue(SqQueue *Sq,SqElemType e) {
	if (SqQueueFull(Sq)) return false;
	Sq->rear++;							//元素进队,先将尾指针rear+1

	//然后把要进队的元素e赋值给队列的data数组中的Sq->rear的位置中
	Sq->data[Sq->rear] = e;				
	return true;
}

bool deSqQueue(SqQueue *Sq, SqElemType &e) {
	if (SqQueueEmpty(Sq)) return false;
	Sq->front++;				//元素出队,将队头指针front+1
	e = Sq->data[Sq->front];	//将出队元素放在e中,以备用
	return true;
}

//参数arrLen,是为了控制下面这个循环的长度
void DisplaySqQueue(SqQueue *Sq, int arrLen) {
	for (int i = 0; i < arrLen; i++) {		//遍历队列,将队列的元素输出
		cout << Sq->data[i] << " ";
	}
}

int SqQueueLength(SqQueue *Sq) {
	return Sq->rear + 1;		//队列的长度等于队尾指针rear+1
}

运行截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq1445654576/article/details/83510898