队列类模板.docx
- 文档编号:12771959
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:13
- 大小:136.93KB
队列类模板.docx
《队列类模板.docx》由会员分享,可在线阅读,更多相关《队列类模板.docx(13页珍藏版)》请在冰点文库上搜索。
队列类模板
封皮
(按学校要求手工填写)
成绩评定表
学生姓名
崔丁昴
班级学号
15
专业
通信工程
课程设计题目
队列类模板的设计与实现
评
语
组长签字:
成绩
日期
20年月日
课程设计任务书
学院
信息科学与工程
专业
通信工程
学生姓名
崔丁昴
班级学号
15
课程设计题目
队列类模板的设计与实现
实践教学要求与任务
进行队列类模板的设计并实现,队列采用循环队列实现,数据元素可以是char,int,float等多种数据类型,包括以下功能:
(1)实现初始化队列操作,建立一个空队列;
(2)实现清空队列操作;(3)实现判断队列是否为空的操作;
(4)实现求队列长度的操作;(5)实现返回队首元素的操作;
(6)实现入队操作;(7)实现出队操作;
(8)实现队列的遍历操作,输出队列的每个元素。
(9)将上述功能作为类的成员函数实现,编写主函数测试上述功能。
工作计划与进度安排
第17周:
分析题目,查阅课题相关资料,进行类设计、算法设计;
第18周:
程序的设计、调试与实现;
第19周:
程序测试与分析,撰写课程设计报告,进行答辩验收。
指导教师:
201年月日
专业负责人:
201年月日
学院教学副院长:
201年月日
摘要
很多自然科学和工程技术中的问题的解决最终都归结到队列问题的处理,模板是处理问题很经典的方法,由它改进、变形得到的类模板,是一种效率很高、较为常用的方法。
本文采用C++语言实现了对队列的各个操作,设计了队列类,采用VisualC++的控制台工程和MFC工程分别实现了对队列的处理。
关键词:
队列;类模板;控制台工程;MFC工程
Notableofcontentsentriesfound.
1.需求分析
1.应用类模板可以使类中的数据成员、成员函数的参数及成员函数的返回值能根据模板参数匹配情况取任意数据类型。
这种类型既可以是C++预定义的数据类型,也可以是用户自定义的数据类型。
2.队列在程序设计中也经常出现。
一个最典型的例子就是操作系统中的作业排队。
在允许多道程序运行的计算机系统中,同时有几个作业运行。
如果运行的结果都需要通过通道输出,那就要按请求输出的先后次序排队。
每当通道传输完毕可以接受新的输出任务时,队头的作业先从队列中退出作输出操作。
凡是申请输出的作业都从队尾进入队列。
2.算法基本原理
1.初始化一个循环队列。
和顺序栈相类似,在队列的顺序存储结构中,除了用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外,尚需附设两个指针front和rear分别指示队列头元素及队列尾元素的位置。
2.实现清空队列操作。
直接让类Queue中的private成员全部清零。
从而实现队列的清空。
3.实现判断队列是否为空的操作。
如果该队列中成员count为零的话。
便直接输出该队列为空。
4.实现求队列长度的操作。
直接输出当前情况下的成员count的值。
5.实现返回队首元素的操作。
由于存在front直接指向着对首。
所以直接输出该队首元素即q[front]。
6.实现入队操作。
在count++的情况下。
让输入的值赋于q[rear++]。
即实现了在队尾插入的功能。
7.实现出队操作。
在count--的情况下。
让q[front]=q[front+1]。
即实现了在队首删除的功能。
8.实现队列的遍历操作。
输出队列的每个元素。
利用for循环直接输出q[]数组中所有的元素。
3.类设计
1.对于基类Queue来讲。
内部有私有成员和公有成员。
私有成员包括了描述一个队列必须的对首(front)、队尾(rear)、即队总数(count)。
另外还有用于存放队列数据的一个数组qlist[MaxQSize]。
公有成员则包括了各个函数。
Queue(void)为构造函数。
QDelete()为实现队列的删除的函数。
QInsert()为实现队列的插入的函数。
ClearQueue()为实现队列的清空的函数。
QLength()为计算求出队列的长度的函数。
QFront()为找到队列的队首元素的函数。
QEmpty()为判断队列是否为空的函数。
PrintQueue()输出队列的函数。
2.对于模板类来讲。
即template
由于要求的是可以执行int、char、float三种类型的数据。
所以我们在主函数中定义了三个成员Queue
用于分别调用这三种类型进行操作处理。
4.基于控制台的应用程序
整个程序分为三个大部分。
第一个部分即为对类Queue的定义。
第二个部分则是对类Queue中的各个成员函数进行定义。
第三个部分即为主函数,主函数中分别定义了int型、float型、char型的队列类型用于程序的选择及处理。
类的初始定义
#include
#include
usingnamespacestd;
constintMaxQSize=20;
template cin>>d; switch(d){ case1: {();IfContinue();}break; case2: {();IfContinue();}break; case3: {();IfContinue();}break; case4: {();IfContinue();}break; case5: {();IfContinue();}break; case6: {();IfContinue();}break; case7: {();IfContinue();}break; default: break; } }}break; case2: {while (1){ cout<<"1.初始化2.删除3.长度4.队首元素5.清空6.判断7.输出"< cin>>d; switch(d){ case1: {();IfContinue();}break; case2: {();IfContinue();}break; case3: {();IfContinue();}break; case4: {();IfContinue();}break; case5: {();IfContinue();}break; case6: {();IfContinue();}break; case7: {();IfContinue();}break; default: break; } }}break; case3: {while (1){ cout<<"1.初始化2.删除3.长度4.队首元素5.清空6.判断7.输出"< cin>>d; switch(d){ case1: {();IfContinue();}break; case2: {();IfContinue();}break; case3: {();IfContinue();}break; case4: {();IfContinue();}break; case5: {();IfContinue();}break; case6: {();IfContinue();}break; case7: {();IfContinue();}break; default: break; } }}break; default: break; } } 基于控制台的应用程序测试 对int型数据进行程序运行结果如图1所示。 图1int型数据运行结果 对char型数据进行程序运行结果如图2所示。 图2char型数据运行结果 对float型数据进行程序运行结果如图3所示。 图3float型数据运行结果 基于MFC的应用程序设计 MFC程序界面设计 首先在VC中建立MFCAppWizard(exe)工程,名称为队列,并在向导的Step1中选择Dialogbased,即建立基于对话框的应用程序,如下图4~5所示。 图4建立MFCAppWizard(exe)工程 图5建立基于对话框的应用程序 将对话框资源中的默认对话框利用工具箱改造成如下界面,如图6所示。 图6方程组求解程序界面设计 图6所示的界面中包含了2个StaticText控件,4个Button控件,和11个EditBox控件,控件的基本信息列表如下表1所示。 表1控件基本信息 控件类别 控件ID 控件Caption 说明 StaticText IDC_STATIC 该队列为: 输入插入的数据: Button IDC_BUTTON_Read 读入数据 IDC_BUTTON_Del 删除数据 IDC_BUTTON_Empty 清空数据 IDC_BUTTON_Insert 进行插入 EditBox IDC_EDIT_A00~IDC_EDIT_A10 队列的10个元素 IDC_EDIT_b0 用于插入的元素 MFC程序代码设计 为了能够将对话框界面上的控件能够与代码联系起来,需要为11个EditBox控件建立MemberVariables,按Ctrl+w键进入MFCClassWizard界面,选择MemberVariables选项卡,可显示成员变量设置界面。 通过该界面设置与11个EditBox控件对应的成员变量,具体如表2所示。 表2控件基本信息 控件ID 成员变量类型 成员变量名称 IDC_EDIT_A00~IDC_EDIT_A10 int dl_1~dl_10 IDC_EDIT_b0 int cr_1 下面是编写代码的重要阶段,可以借鉴在设计基于DOS界面的控制台应用程序的代码,并将其作必要的改写,具体改写的步骤与内容如下。 1.编写读入数据按钮的消息处理函数,实现将队列的数据刷新到界面上,具体代码如下: voidCMyDlg: : OnInputNum(){ 编写删除数据的消息处理函数,实现数据删除,具体代码如下: voidCMyDlg: : OnDeleteNum() { 编写插入数据的消息处理函数,实现数据插入,具体代码如下: voidCMyDlg: : OnInsertNum(){ 编写清空数据的消息处理函数,实现数据清空,具体代码如下: voidCMyDlg: : OnEmptyNum(){ 控制台的程序上。 我们可以满足类模板的要求。 即可以对int、char、float三种类型的数据进行处理。 而在MFC中。 我们只定义了int类型进行处理。 而且程序的可变性不够强。 2.在MFC的程序设计中。 我们并未严格的使数据成为一个队列。 只是象征性的表示了队首与队尾。 所以程序的满足要求性也不够。 3.对于MFC的应用程序。 由于MFC是依赖图形而存在的。 而我们所做的MFC的图形界面过于简单单一化了。 而且处理的灵活性不够。 对于这一点。 希望在以后学习中得到适当的加强。 参考文献 [1]谭浩强.C++面向对象程序设计.北京: 清华大学出版社, [2]马秀丽,刘志妩,李筠.C语言程序设计.北京: 清华大学出版社, [3]严蔚敏,吴伟民.数据结构(C语言版).北京: 清华大学出版社,2007
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 队列 模板