文章目录

  • 前言
  • 一、具体函数
  • 二、完整代码
  • 三、代码效果截图
  • 总结

前言

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


一、具体函数


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++实现链表队列 实现模拟医院看病排队问题 实现链表的基本操作相关推荐

  1. 队列应用----模拟患者看病

    队列应用-----模拟患者医院看病过程 患者医院看病过程是,先排队等候,再看病治疗.在排队的过程中主要重复做两件事情,一是患者到达诊室时,将病历交给护士,排到等候队列中就诊:二是护士从等候队列中取出下 ...

  2. 单链表(LinkedList)的java实现(注释详细)

    单链表(LinkedList)的java实现 重点: 1.链表是以节点的方式存储的: 2.每个节点包含data域.next域:指向下一个节点: 3.链表的各个节点不一定是连续存储: 4.链表分带头节点 ...

  3. ConcurrentLinkedQueue非阻塞无界链表队列

    ConcurrentLinkedQueue非阻塞无界链表队列  ConcurrentLinkedQueue是一个线程安全的队列,基于链表结构实现,是一个无界队列,理论上来说队列的长度可以无限扩大. 与 ...

  4. 【BCVP】实现基于 Redis 的消息队列

    聆听自己的声音 如果自己学不动了,或者感觉没有动力的时候,看看书,听听音乐,跑跑步,休息两天,重新出发,偷懒虽好,可不要贪杯. 话说上回书我们说到了,Redis的使用修改<[BCVP更新]Sta ...

  5. Java基于内存的消息队列实现

    Java基于内存的消息队列实现 有需要源码的同学可以去Gitee上下载: https://gitee.com/hyxl-520/memory_message_queue 先看测试情况 需求背景 需求来 ...

  6. 数据结构_Java_基于 线性表-单链表的初始化、逆序、去重、非递减序列的合并(开辟新链表先整体插入一个链表全部元素,再遍历另外一个链表寻找合适位置插入 、开辟新链表实现舍弃原链表)等操作实现

    写在前面 不久前学习了数据结构线性表-数组-链表的相关知识,用C/C++语言实现了 单链表的系列相关操作 .见往期博客: 数据结构实验2_C语言_基于顺序表的非递减有序表的合并.线性表元素的增.删.改 ...

  7. LeetCode 链表 队列 栈的问题

    链表 双向链表 146. LRU 缓存 快慢指针 148. 排序链表 143. 重排链表 剑指 Offer II 027. 回文链表 82. 删除排序链表中的重复元素 II 142. 环形链表 II ...

  8. matlab 数据白化,“matlab对Excel表格数据预处理“急求FastICA 的源程序 matlab,包括数据的预处理(中心化和白化),注释详细点,谢谢!...

    急求FastICA 的源程序 matlab,包括数据的预处理(中心化和白化),注释详细点,谢谢! % function [Ahat2, shat, n_iteration Test] = nc_fas ...

  9. 基于数组实现循环队列(基于Java实现)

    title: 基于数组实现循环队列(基于Java实现) tags: 数组 循环队列 基于数组实现循环队列的方法原理: 我们在用数组实现队列的时候,发现当tail = n时,就会有数据搬移的操作,这样一 ...

最新文章

  1. 30行代码,带你分分钟创建神经网络!(附工具教程)
  2. LTE-TDD与LTE-FDD技术比较
  3. 链路 英文_光纤链路基础
  4. nginx php 错误日志,PHP 错误与异常的日志记录
  5. 11-jQuery的事件绑定和解绑
  6. 【洛谷4389】付公主的背包(生成函数,多项式运算)
  7. 世纪渣男何书桓! | 今日最佳
  8. ZetCode C#/vb.net 教程
  9. 日期插件My97DatePicker
  10. 【深度优先搜索】20行代码解决8皇后问题
  11. vs2010 打开项目卡死问题解决办法
  12. 离散数学课后习题答案 左孝凌版
  13. AD17入门简单教程(一)
  14. 非常实用的在线工具网站清单
  15. 搭建 IPv6 Web服务器
  16. opencv生成3d模型_OpenCV4.2使用viz模块显示3D图像
  17. 计算机网络雨课堂练习11
  18. AOP的两种动态代理机制
  19. FPGA中ICAP原语的使用——Multiboot功能的实现
  20. 输出任意边长的菱形————C语言实践应用(1)(完整源码)

热门文章

  1. jQuery 图片查看插件 Magnify 开发简介(仿 Windows 照片查看器)
  2. 数字逻辑课程设计电子钟
  3. python免费训练营教程_鹅厂大牛亲授Python零基础寒假训练营视频教程
  4. 卫星导航定位技术二:由星历参数求解卫星时空位置
  5. CAD与3D建模软件:有什么区别?
  6. 云计算课程 DAY 1
  7. 读汤用彤之《印度哲学史略》
  8. win10系统安装与双系统ubuntu深度学习环境配置
  9. windows 10 defender 577的错误处理方法
  10. 解决mysql远程连接等待时间长的问题