注释详细 基于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;}}}
三、代码效果截图
总结
代码都是博主一点点敲的 如果对你有用的话
点个
呐
注释详细 基于C++实现链表队列 实现模拟医院看病排队问题 实现链表的基本操作相关推荐
- 队列应用----模拟患者看病
队列应用-----模拟患者医院看病过程 患者医院看病过程是,先排队等候,再看病治疗.在排队的过程中主要重复做两件事情,一是患者到达诊室时,将病历交给护士,排到等候队列中就诊:二是护士从等候队列中取出下 ...
- 单链表(LinkedList)的java实现(注释详细)
单链表(LinkedList)的java实现 重点: 1.链表是以节点的方式存储的: 2.每个节点包含data域.next域:指向下一个节点: 3.链表的各个节点不一定是连续存储: 4.链表分带头节点 ...
- ConcurrentLinkedQueue非阻塞无界链表队列
ConcurrentLinkedQueue非阻塞无界链表队列 ConcurrentLinkedQueue是一个线程安全的队列,基于链表结构实现,是一个无界队列,理论上来说队列的长度可以无限扩大. 与 ...
- 【BCVP】实现基于 Redis 的消息队列
聆听自己的声音 如果自己学不动了,或者感觉没有动力的时候,看看书,听听音乐,跑跑步,休息两天,重新出发,偷懒虽好,可不要贪杯. 话说上回书我们说到了,Redis的使用修改<[BCVP更新]Sta ...
- Java基于内存的消息队列实现
Java基于内存的消息队列实现 有需要源码的同学可以去Gitee上下载: https://gitee.com/hyxl-520/memory_message_queue 先看测试情况 需求背景 需求来 ...
- 数据结构_Java_基于 线性表-单链表的初始化、逆序、去重、非递减序列的合并(开辟新链表先整体插入一个链表全部元素,再遍历另外一个链表寻找合适位置插入 、开辟新链表实现舍弃原链表)等操作实现
写在前面 不久前学习了数据结构线性表-数组-链表的相关知识,用C/C++语言实现了 单链表的系列相关操作 .见往期博客: 数据结构实验2_C语言_基于顺序表的非递减有序表的合并.线性表元素的增.删.改 ...
- LeetCode 链表 队列 栈的问题
链表 双向链表 146. LRU 缓存 快慢指针 148. 排序链表 143. 重排链表 剑指 Offer II 027. 回文链表 82. 删除排序链表中的重复元素 II 142. 环形链表 II ...
- matlab 数据白化,“matlab对Excel表格数据预处理“急求FastICA 的源程序 matlab,包括数据的预处理(中心化和白化),注释详细点,谢谢!...
急求FastICA 的源程序 matlab,包括数据的预处理(中心化和白化),注释详细点,谢谢! % function [Ahat2, shat, n_iteration Test] = nc_fas ...
- 基于数组实现循环队列(基于Java实现)
title: 基于数组实现循环队列(基于Java实现) tags: 数组 循环队列 基于数组实现循环队列的方法原理: 我们在用数组实现队列的时候,发现当tail = n时,就会有数据搬移的操作,这样一 ...
最新文章
- 30行代码,带你分分钟创建神经网络!(附工具教程)
- LTE-TDD与LTE-FDD技术比较
- 链路 英文_光纤链路基础
- nginx php 错误日志,PHP 错误与异常的日志记录
- 11-jQuery的事件绑定和解绑
- 【洛谷4389】付公主的背包(生成函数,多项式运算)
- 世纪渣男何书桓! | 今日最佳
- ZetCode C#/vb.net 教程
- 日期插件My97DatePicker
- 【深度优先搜索】20行代码解决8皇后问题
- vs2010 打开项目卡死问题解决办法
- 离散数学课后习题答案 左孝凌版
- AD17入门简单教程(一)
- 非常实用的在线工具网站清单
- 搭建 IPv6 Web服务器
- opencv生成3d模型_OpenCV4.2使用viz模块显示3D图像
- 计算机网络雨课堂练习11
- AOP的两种动态代理机制
- FPGA中ICAP原语的使用——Multiboot功能的实现
- 输出任意边长的菱形————C语言实践应用(1)(完整源码)