注释详细 基于C++实现链表队列 实现模拟医院看病排队问题 实现链表的基本操作


前言

用链表实现队列
模拟医院看病


一、具体函数

在这里插入图片描述
1,清空队列
2,出队操作
3,入队操作
4,取队头
5,初始化队列
6,队列是否为空
7,看医生函数(模拟医院看病,患者排队)

二、完整代码

代码如下(示例):

#include<iostream>
#include"conio.h"//_getch()函数的头文件
typedef int Datatype;//int的别名
using namespace std;
/*
用链表实现队列
模拟医院看病
*/
typedef struct QNode {
	Datatype data;//节点
	QNode *next;//next指针
};

typedef struct QueueList {

	QNode *front;//头指针和尾指针
	QNode *rear;
};

int main() {
	void InitQueue(QueueList * q);//初始化
	int EnQueue(QueueList * q, Datatype x);//入队
	int DeleteQueue(QueueList * q, Datatype * e);//出队
	void seeDoctor(QueueList * q);//看医生函数
	QueueList q1;//创建队列q1
	InitQueue(&q1);//初始化队列q1
	seeDoctor(&q1);//导入看医生函数
	
	return 0;
}


void InitQueue(QueueList *q) {
	q->front = q->rear = new QNode;//为头指针尾指针提供开辟空间
	if (q->front == NULL) {//如果开辟不到空间
		cout << "内存不足" << endl;
		exit(-1);
	}
	//不能使空间指向空

	q->front ->next= NULL;
}


int QueueEmpty(QueueList *q) {//判断这个队列是否为空
	if ( q->rear==NULL) {//如果尾指针为空
		return 1;
	}
	else {
		return 0;
	}

}


int EnQueue(QueueList *q,Datatype x) {//入队操作
	
	QNode *new_node = new QNode;//开辟空间
	if (new_node == NULL) {//开辟不到
		cout << "内存不足" << endl;
		return 0;
		exit(-1);
	}
	else {
		new_node->data = x;//将值给新结点
		new_node->next = NULL;//新结点的下一个位置为空

		q->rear->next = new_node;//将指针后一个指向新节点
		q->rear = new_node;//现在新结点是尾结点
		return 1;
	}

}

int DeleteQueue(QueueList *q,Datatype *e){//出队操作出队出的是节点,所以创建节点类型
	QNode* temp;//出的位置是节点,所以开辟节点类型
	if (q->rear==q->front) {//如果尾头指向的位置一样,队空
		cout << "队空" << endl;
		return 0;
	}
	else {
		temp = q->front->next;//使节点指向要被提取数据的位置
		*e = temp->data;//取值
		
		q->front->next= temp->next;//断掉与被删除节点的连接
		

		if (q->rear == temp) {//如果这个删除的节点是队尾
			
			q->front=q->rear;//尾结点和头节点相等
			
		}
		delete(temp);//释放被删除节点的空间
		
		return 1;
	}
}
int GetHead(QueueList*Q,Datatype *e) {//获得队首元素
	QueueList* q = Q;
	if (q->rear == NULL) {//如果尾节点指向的内容为空
		cout << "队空" << endl;
		return 0;
	}
	else {
		q->front = q->front->next;//取队首元素
		*e = q->front->data;
		return 1;
	}
}

void ClearQueue(QueueList *Q) {//清空队列

	while (!Q->front== NULL) {//如果队列不为空
		Q->rear = Q->front->next;//队尾指针指向队头指针的下一个节点
		delete(Q->front);//这个链表后的数据都释放了
		Q->front = Q->rear;//队头指针指向队尾指针
	}

}
void seeDoctor(QueueList *Q) {//模拟医院看病,用A表示有人排队,N人去检查,Q不再接受人排队
	int EnQueue(QueueList * q, Datatype x);//入队
	int DeleteQueue(QueueList * q, Datatype * e);//出队
	int flag=1;//标志量
	char ch;
	int ren=0;//来的人
	int InRen = 0;//进去的人
	int j = 0;//控制返回值
	while (flag) {
		cout << "输入操作:" << endl;
		ch = _getch();
		switch (ch)
		{
		case 'a':
		case'A':
			cout << "来的人的病历号:" << endl;
			cin >> ren;
			j=EnQueue(Q, ren);
			break;
		case 'N':
		case'n':
			
			j=DeleteQueue(Q, &InRen);
			if (j == 1) {
				cout << "检查的人是:" <<InRen<< endl;
			}
			else {
				cout << "队伍里没人了" << endl;
			}
			
			break;
		case 'Q':
		case'q':
			flag = 0;//标志为0
			cout << "今天不再接待患者了" << endl;
			while (!(Q->front==Q->rear)) {
				DeleteQueue(Q, &InRen);
				cout << "走的人是:" << InRen << endl;
			}
			break;
		default:
			cout << "输入命令不正确" << endl;

		}
	}
	
}

三、代码效果截图

在这里插入图片描述

总结

代码都是博主一点点敲的 如果对你有用的话

点个

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值