队列模板简单应用算法设计:士兵队列训练
问题描述 :
目的:使用C++模板设计队列(链队列和顺序队列)的抽象数据类型(ADT)。并在此基础上,使用队列ADT的基本操作,设计并实现简单应用的算法设计。
内容:(1)请参照栈的ADT模板,设计队列的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的栈ADT原型文件,自行设计队列的ADT。)
- (2)ADT的简单应用:使用该ADT设计并实现若干应用队列的算法设计。
应用:某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。
要求设计一个算法,使用链队列或顺序队列(只能使用1个队列),设计并实现打印输出剩下的新兵最初的编号的算法。
注意:本题允许有多个测试数据组,新兵总人数不超过5000。由于士兵可能的总人数较多,顺序队列需预先申请的存储空间较大,建议使用链队列。(样例程序使用的是链队列。)
参考函数原型:template<class ElemType>void queuetraining(SqQueue<ElemType> &S, int T); //T为测试数据的组数/* 链队列的结点定义 */template<class ElemType>struct LinkQueueNode{ElemType data;LinkQueueNode<ElemType> *next;LinkQueueNode(LinkQueueNode<ElemType> *ptr = NULL){next = ptr;} //构造函数1,用于构造头结点LinkQueueNode(const ElemType &item, LinkQueueNode<ElemType> *ptr = NULL) //构造函数2,用于构造其他结点 //函数参数表中的形参允许有默认值,但是带默认值的参数需要放后面{next = ptr;data = item;}ElemType getData(){ return data;} //取得结点中的数据void SetLink( LinkQueueNode<ElemType> *link ){ next = link; } //修改结点的next域 void SetData( ElemType value ){ data = value; } //修改结点的data域};//带头结点的链队列 template<class ElemType>class LinkQueue{private:LinkQueueNode<ElemType> *front; // 队头指针LinkQueueNode<ElemType> *rear; // 队尾指针int length; //队列当前元素个数 public://无参数的构造函数LinkQueue();//析构函数~LinkQueue(){LinkQueueDestroy();}//销毁链队列 bool LinkQueueDestroy();//清空链表bool LinkQueueClear(); //返回链队列的长度int QueueLength() const{ return length;}//判断链队列是否为空队列bool QueueisEmpty() const;//出队bool deQueue( ElemType &e );//入队bool enQueue( ElemType e );//获取链队列头结点指针 LinkQueueNode<ElemType>* GetFront() { return front;}//获取队头元素ElemType GetFrontData(){ return front->data;} //获取链队列队尾指针LinkQueueNode<ElemType>* GetRear() { return rear;}//遍历链队列 bool QueueTraverse() const;};
输入说明 :
第一行:组数N,第二行-第N+1行:每组的新兵人数
输出说明 :
第一行:.. 剩下的新兵最初的编号,编号之间有用","分隔。.
第N行:
输入范例 :
2
20
40
输出范例 :
1,7,19
1,19,37
思路分析
- 过程演示
- 使用队列实现
- 先是模拟报数和出队,1至2报数,和1至3报数基本一致
- 实现的总的过程
- 两个注意事项
伪码实现
void queuetraining(LinkQueue<ElemType> &S, int T[],int len) {for(m = 0; m < len; m ++) {//生成队列的过程int edge = T[m];for(i = 1; i < edge +1 ; i ++) {S.enQueue(i);}//报数的过程start,temp,temp2;while(1) {start = S.GetFrontData();do {for( i = 1; i <= 2; i++) {S.deQueue(temp2);if(i == 1) S.enQueue(temp2);temp = S.GetFrontData();if(temp == start) break;}} while(temp != start);if(S.QueueLength() <= 3) break;start = S.GetFrontData();do {for(i = 1; i <= 3; i++) {S.deQueue(temp2);if(i != 3) S.enQueue(temp2);temp = S.GetFrontData();if(temp == start) break;}} while(temp != start);if(S.QueueLength() <= 3) break;}S.LinkQueueClear();}}
事故现场
算是第一个次提交
分析与总结
关于析构函数
- 一定先判定是否有下一个结点,下一个结点的地址是否为空,再去进行相关的操作。
- 其实我觉得上面写的太难懂了,读起来有点费劲,多一点变量也没事,更加便于理解。
关于构造函数
- 千万别忘记将的链表的长度初始化,不然你会很费解,为什么会一直死循环。
关于整个函数的实现过程
报数随时都可能结束,所以每报一个数字,都要进行判定,是不是要结束了
完整的一轮报数结束之后,才需要进行判定人数是否不满足。
我认为老师的给的参考函数模型有问题,我实现不了,只能修改一下
我认为有很多重复过程,应该可以进行进一步的提炼,使得整个函数体不至于那么臃肿,但是我不知道怎么让函数返回break。
若有不妥,或者疑问之处,请加本人的扣扣651378276,一起商议学习,进步
白嫖我很不舒服,写了很久,麻烦转发扩一下
队列模板简单应用算法设计:士兵队列训练相关推荐
- dhu 4.1 队列模板简单应用算法设计:士兵队列训练
队列模板简单应用算法设计:士兵队列训练 时间限制: 1S类别: DS:队列->队列定义及应用 晚于: 2022-05-04 23:55:00后提交分数乘系数50% 截止日期: 2022-05-0 ...
- 顺序队列模板简单应用算法设计:农夫过河(这个比较难,我自己都觉得难)
文章目录 问题描述 : 输入说明 : 输出说明 : 输入范例 : 输出范例 : 思路分析 伪码实现 事故现场 第一次提交 分析与总结 如有不妥,或者疑问,请加扣扣651378276,一起商议学习进步 ...
- HTML5期末大作业:花甲美食网站设计——精美花甲美食网页(8页) 海鲜网页制作作业 生鲜水果蔬菜网页设计模板 简单学生网页设计代做 静态HTML CSS网站制作成品
HTML5期末大作业:花甲美食网站设计--精美花甲美食网页(8页) 海鲜网页制作作业 生鲜水果蔬菜网页设计模板 简单学生网页设计代做 静态HTML CSS网站制作成品 常见网页设计作业题材有 个人. ...
- 网页设计作业花甲美食网站设计——精美花甲美食网页(8页) 海鲜网页制作作业 生鲜水果蔬菜网页设计模板 简单学生网页设计代做 静态HTML CSS网站制作成品
HTML5期末大作业:花甲美食网站设计--精美花甲美食网页(8页) 海鲜网页制作作业 生鲜水果蔬菜网页设计模板 简单学生网页设计代做 静态HTML CSS网站制作成品 常见网页设计 文章目录 HTML ...
- 简单排序算法设计(Java)
总共有八种排序算法,还是慢慢看吧 1.简单排序算法 简单排序算法就是设置标兵,逐个比较数,然后查找插入位置,插入 public static void p(int[] a){for(int i=0;i ...
- 队列的基本操作_算法设计:数据结构-队列
一.队列 1.队列的概念 队列是一种"先进先出(first in first out)"的数据结构,它是一种有序线性表的抽象数据类型.队列在计算机 领域的应用也相当的广泛,例如计算 ...
- 高仿英雄联盟游戏网页制作作业 英雄联盟LOL游戏HTML网页设计模板 简单学生网页设计 静态HTML CSS网站制作成品
- 宠物狗网页制作作业 保护动物网页设计模板 简单学生网页设计 静态HTML CSS网站制作成品
- 实现环形队列各种基本运算的算法
/** * 实现环形队列各种基本运算的算法 * 目的: * 领会环形队列存储结构和掌握环形队列中各种基本运算算法设计 * 主要功能: * 1.初始化队列q * ...
最新文章
- Python使用matplotlib函数subplot可视化多个不同颜色的折线图、为多个子图添加总标题(main title)、自定义设置主标题字体类型、字体大小、字体颜色等
- python如何定义一个简单的队列
- The source attachment does not contain the source for the file Activity.class
- 算法学习:回文自动机
- React Native应用如何想访问HTTP资源应该怎么办
- linux 下 mysql默认表_linux环境下mysql默认是区分表名大小写的
- JAVA中pin什么意思_java语言中的多态概述
- 【渝粤题库】陕西师范大学202012 刑事诉讼法专论 作业
- Mybatis简单数据库查询
- \Process(sqlservr)\% Processor Time 计数器飙高
- 小米路由器4a刷第三方固件_小米路由器4A的断网问题初探
- Java网络编程之客户端中的Socket
- CSS3 transform 属性
- 通达信 移动平均算法_【股市钱包】A005号指标:通达信分时图MACD
- 搞定Prometheus普罗米修斯监控系统
- 页面添加蒙版,但是不影响页面其他事件响应
- 失效而后犬儒【2019.05.15报告记录】
- 移动互联网组建与优化
- Electron设置窗口图标、设置桌面快捷方式图标
- json发送数据加密方法_发送加密的电子邮件和安全邮件的最佳免费方法