1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 注释详细 基于C++实现链表队列 实现模拟医院看病排队问题 实现链表的基本操作

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

时间:2024-03-21 16:49:01

相关推荐

注释详细  基于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;//创建队列q1InitQueue(&q1);//初始化队列q1seeDoctor(&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;//标志为0cout << "今天不再接待患者了" << endl;while (!(Q->front==Q->rear)) {DeleteQueue(Q, &InRen);cout << "走的人是:" << InRen << endl;}break;default:cout << "输入命令不正确" << endl;}}}

三、代码效果截图

总结

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

点个

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。