




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录一、 题目内容及要求3二、 题目设计思路3三、 类设计与类关系4四、 主要功能函数流程图4五、 运行结果及分析5六、 总结6一、 题目内容及要求1. 队列是一种连续的存储结构,存入数据只能从一端(称为尾部)进入,取出数据则只能从另一端(头部)取出。根据下述描述实现一个自定义的队列类:template struct LinkNodeType data; LinkNode *next; LinkNode() : next(NULL) LinkNode( const Type &x,LinkNode *p=NULL ) : data(x),next(p) ;template class Queue public: Queue (); /构造函数 Queue (); /析构函数 inline bool isEmpty () const; /队列是否为空 inline void makeEmpty(); /清空队列 inline void enqueue( const Type &x ); /插入一个元素 inline void dequeue( Type &x ); /弹出一个元素inline void getFront( Type &x); /得到对头元素private:LinkNode *front; /指向头结点的指针,front-next-data 是队头的第一个元素 LinkNode *rear; /指向队尾(最后添加的一个元素)的指针inline void handleUnderflow(); /控制队列下溢;二、 题目设计思路1. queue.h文件在queue.h头文件中使用命名空间itlab在其中声明:(1) 模板结构体链表结点(struct LinkNode),其中包含的数据成员有:模板参数类类型Type 对应的data,存放模板实现类的具体数据,LinkNode 模板类型结构体指针 next,用来指向下一个结点;成员函数包括:LinkNode()无参构造函数,其中数据成员next默认为NULL,LinkNode(const Type &x,LinkNode *p = NULL),采用参数初始化表对数据成员初始化,其中第一个参数为常量Type类型的引用x,初始化数据成员data,第二个参赛为结构体类型指针p默认值为NULL,用来初始化数据成员next。(2) 模板类队列(class Queue),包含的公共成员函数有:无参构造函数 Queue(),在定义对象时,由系统调用,完成对象的初始化;析构函数Queue(),与构造函数相反,是在撤销对象占用内存前进行一些清理工作。可以被用来执行“用户希望在最后一次使用对象之后所执行的任何操作”;内联函数判断队列是否为空,返回值为布尔类型常量,inline bool isEmpty() const;内联函数清空队列,无返回值,inline void makeEmpty();内联函数向队列中插入一个元素,inline void enqueue(const Type &x),参数为Type类型常量,插入的新元素作为队列中的队尾结点;内联函数从队列中弹出一个元素, inline void dequeue( Type &x ),无返回值,但传入参数为Type类型的引用x,从对首取出结点元素的数据,将其赋值给x,实现函数值的返回;内联函数得到对首元素结点的数据,inline void getFront( Type &x),同样采用函数参数引用类型间接返回函数值;私有数据成员包括:指向模板结构体类型变量的头指针,LinkNode *front指向模板结构体类型变量的后继指针,LinkNode *rear内联函数控制队列下溢,inline void handleUnderflow()。(3) 同时包含其实现文件queue-impl.h,#include queue-impl.h 。 2. queue-impl.h文件在queue-impl.h头文件,是实现queue.h头文件中声明的模板类Queue,实现其声明的函数,完成函数的定义,在预编译时,会将头文件queue-impl.h中的内容取代头文件queue.h中的 #include queue-impl.h这一行。3. queue_test.cpp在queue_test.cpp文件中,包含主函数,声明结构体类型Student,是模板结构体链表(LinkNode)的实现类,将其作为插入队列和弹出队列的基本元素,测试队列类Queue的主要成员函数:判断队列是否为空(isEmpty)、向对列中插入一个元素(enqueue)、从队列中弹出一个元素(dequeue)、得到队首元素的数据(getFront)、私有成员函数控制队列下溢(handleUnderflow)。三、 类设计与类关系1. 类设计主要包含队列类Queue。其私有数据成元是指向结构体类型变量(struct Student)的头指针和指向结构体类型的后继指针。在main函数中声明了结构体类型Student,其主要包含整型的学号、字符串类型的学生姓名、字符串类型的系部名称,以及带默认参数的构造函数。2. 类关系在main函数中,通过定义一个队列类类型的对象q(Queue q),显示的将结构体类型(Student为结构体类型)传递给 Queue对应的类参Type(模板参数类型)。四、 主要功能函数流程图1. 向对列中插入一个元素函数( inline void enqueue(const Type &x) )流程图2. 从队列中弹出一个元素函数( inline void dequeue( Type &x ) )流程图五、 运行结果及分析1. 运行结果:2. 结果分析:(1) 队列初始为空,依次将学生插入队列,并打印入队顺序;(2) 此时调用getFront(Type &x)函数取得对头的元素;(3) 出对时,按照先进先出原则,打印出队顺序。六、 总结1.模板机制(1)模板的代码重用机制是基于C语言宏展开基础发展而来,宏展开的一套文本替换算法从预处理阶段搬移到编译阶段,结合函数重载中的一套类型匹配搜寻算法一起就诞生了模版的内在运作机制。(2)函数模板和类模板提供了类型参数化的通用机制。函数模板的类参在函数的调用点根据实参的类型反演出来,形成重载函数,同时实参的数值作为入口又进行函数调用。(3)类模板的类参一般由对象定义的方式显式给出,根据直接指定的类名或整型常数初始化模板类参形参表中的对应项目值,用这些具体的类名和常数替换模板中类参或形参,形成特定的类。这些工作是编译器自动宏替换复制完成的,但比预处理的宏替换执行了更多的类型安全检查,而根据模板生成的代码具有明显的相近性质。(4)需要注意形参与类参的区别,形参是运行时压入堆栈传递给函数的数据值,而类参是在函数调用点获得的实参的静态数据类型,数据类型是静态的,该数据类型在编译阶段确定。(5)函数模板产生的函数是一系列形参个数相同,形参数据类型不同的重载函数,类模板产生的类是类名不同,结构相近的类。(6)此外,类模板的不同实现是不同的类,此特定的类上的模板成员函数不同于彼模板类相应的成员函数版本。其间通过类域分辨符进行了清晰的分界,因此类模板提供一种类型安全的鉴别机制。2.队列数据结构(1)队列是一种采用先进先出(first in,first out FIFO)策略的对元素操作的动态集合。(2)队列上的INSERT操作称为入队(ENQUEUE),DELETE操作称为出队(DEQUEUE)。(3)队列的先进先出特性类似于收银台前排队等待结账的一排顾客。队列有对头(head)和对尾(tail),当有一个元素入对时,它被放在队尾的位置,就像一个新到来的顾客排在队伍末端一样。而出队的元素则总是在对头的那个,就像排在队伍前面等待最久的那个顾客一样。源代码:/* * queue.h * * A simple queue implemented by C+ template class. * */#ifndef QUEUE_H#define QUEUE_H#include #include#includeusing namespace std;namespace itlab /* * Queue Node */ /#define QUEUE_INIT_SIZE 100 /队列初始化大小 /#define QUEUE_INCREMENT 10 /队列空间不够时一次申请大小 template struct LinkNode Type data; LinkNode *next; LinkNode() : next(NULL) LinkNode( const Type &x,LinkNode *p=NULL ) : data(x),next(p) ; /* * Queue */ template class Queue public: Queue (); /构造函数 Queue (); /析构函数 / Queue(const Queue &q);/Queue & operator=(const Queue &q); inline bool isEmpty () const; /队列是否为空 inline void makeEmpty(); /清空队列 /inline bool isFull() const; /队列是否已满 /int size () const; /队列中元素的个数 inline void enqueue( const Type &x ); /插入一个元素 inline void dequeue( Type &x ); /弹出一个元素 inline void getFront( Type &x); /得到对头元素 private: LinkNode *front;/指向头结点的指针,front-next-data 是队头的第一个元素 LinkNode *rear; /指向队尾(最后添加的一个元素)的指针 inline void handleUnderflow(); ; #include queue-impl.h/namespace itlab#endif/ QUEUE_H/-/-/* * queue-impl.h * * Implementation for Queue class. * */* * constructors and destructor */ template Queue:Queue():front(NULL), rear(NULL) template Queue:Queue() makeEmpty(); /* * If the queue empty, return true. */ template inline bool Queue:isEmpty() const return front = NULL; /* * Make the queue empty. */ template inline void Queue:makeEmpty() LinkNode *p; while( front != NULL) p = front; front = front-next; delete p; /* * Enter the element into the queue. */ template inline void Queue:enqueue( const Type &x ) if(front = NULL) front = rear = new LinkNode( x ); if( !front ) cerr Out of memory! next = new LinkNode( x ); if( !rear ) cerr Out of memory! next; /* * Pop an element from the queue. */ template inline void Queue:dequeue( Type &x ) if( !isEmpty() ) LinkNode *p = front; x = front-data; front = front-next; delete p; else handleUnderflow(); /* * Get the front element of the queue. */ template inline void Queue:getFront( Type &x ) if( !isEmpty() ) x = front-data; else handleUnderflow(); /* * Handle the error of get element from am empty queue. */ template inline void Queue:handleUnderflow() cerr The queue is empty! endl endl; exit(1); /-/-/* * queue_test.cpp * * Queue class testing. * */#include #include #include queue.h#include using namespace std;using namespace itlab;struct Student int stuNum; string stuName; string department; Student ( int number = 0, const string &name = Tom&Jerry, const string &dpt = Information ) : stuNum(number), stuName(name), department(dpt) ;int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年生物技术行业生物医药新药研发前景分析报告
- 2025年家电维修行业维修服务市场前景分析报告
- 2025年医疗器械行业智能医疗机器人技术前景报告
- 2025年智能电子行业智能化电子产品发展趋势与市场前景研究报告
- 2025年生物科技行业生物技术在农业领域的应用与发展前景研究报告
- 2025年网约车行业共享出行市场前景预测报告
- 崇阳县2025年湖北咸宁崇阳县事业单位招聘工作人员97人(含医疗岗45人)笔试历年参考题库附带答案详解
- 国家事业单位招聘2025中央民族乐团应届毕业生招聘4人笔试历年参考题库附带答案详解
- 国家事业单位招聘2025中国极地研究中心(中国极地研究所)招聘应届毕业生(硕士岗)拟聘笔试历年参考题库附带答案详解
- 四川省四川省卫生健康委员会所属事业单位2025年公开选调工作人员笔试历年参考题库附带答案详解
- 《土地变更调查讲义》课件
- 财务整账合同模板
- 2020年水利水电工程标准施工招标文件
- 《农产品安全与质量检测》课件-3.2.食品中的灰分的测定
- 钢结构厂房排水系统安装方案
- 对新员工保密基本培训
- 口耳目手足课件
- 2024-2025学年湖北省武汉二中广雅中学九年级上学期9月月考数学试题及答案
- 箱式变电站技术规范应答
- 2024年新北师大版七年级上册数学教学课件 第三章 整式及其加减 1 代数式 第1课时 代数式
- 2024 年甘肃省职业院校技能大赛高职组公共管理与服务类人力资源服务赛项竞赛规程
评论
0/150
提交评论