版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、成绩评阅人重庆邮电大学课程设计实验报告班级:1301416姓名:陈昊学号:2014214156指导老师:夏晨洋课程名称:数据结构实验时间:2015年10月26日-2015年11月2日实验地点:数字图书馆负一楼 B132实验四队列的存储与操作一、实验目的1 理解队列是限定只能在队头进行删除操作在队尾进行插入操作的线性表;2 理解队列的存储结构特点,掌握队列的存储分配要点;3掌握队列的基本操作及实现,深刻领会队列操作的先进先出特征,并能正确 分析其时间复杂度,知道队列性能优于普通线性表,以及队列的常用情形。、主要数据结构描述classCirQueuepublic:CirQueue(); CirQu
2、eue();void En Queue(T x);T DeQueue();T GetQueue(); bool Empty(); private:T dataQueueSize;/构造函数,置空队/析构函数将元素x入队将队头元素岀队取队头元素(并不删除)/判断队列是否为空/存放队列元素的数组int fron t, rear;/队头和队尾指针,分别指向队头元素的前一个位置和队尾元素的位置 ;在循环队列这个数据结构中,需要一个构造函数, 来创建一个空的队列; 需要一个析构函数来删除队列;需要一个EnQueue ()函数来插入一个数据;需要一个DeQueue ()函数来将队头的元素出队;需要一个De
3、Queue ()函数来输出队头的值;需要一个布尔型的函数来判断队列是否为空。三、算法的基本思想描述1. 构造函数:令头指针和尾指针均为零。2. 析构函数:空的析构函数。3入队函数:函数的形参为将存入队列的数据的值。因为判空和判满都需要用到 rear=front,所以在判满的操作中,对rea叶1取模,在循环的意义下进行判断。如果(rea叶1) %QueueSize=front,那么队满。如果没有队满,那么就在循环 +1 下标的位置存入当前数据。4出队操作:这里的出队不是删除相应的数据,而是将队头指针+1。首先判断队是否为空,如果不为空就将队头指针在循环意义上+1。5. 取队头元素:将队头元素的值
4、取出。6. 判空:如果rear=front则为空,否则不为空。因为不涉及循环,所以所有函数的时间复杂度都为0( 1)。四、运行的结果截图五、实验体会和收获经过本次试验。我对循环队列有了更深的理解。了解了队列先进先出的特点 知道了如何运用队列解决相应的问题。六、程序清单。CirQueue.h/CirQueue* h-#ifndef CIRQUEUE.H#define CIRQUEUE.Hconst int QueueSize 100;/亡女荐储从列元素的勤组的最犬长度template <clas3 T> -cl a弗 CirQueue"老文模板Cir Queuepublic
5、:ZirQueusC ):7 CirQueu«(): yoid EnQueue(T 藍):I DeQueue();I GetQueue(): bool Eupty(): private:I data Queue Si ec :int frontj rear; ;"构薩函数,覺空从"析构函數"将元素盟入疏/将限头元紊岀弘/?取臥头元素(笄不删腺)"判断瓯刮是杏为空"存锁陆列元素的数组"臥头和臥尾指针,分另I指向尿头元素的前一个位羞和臥尾元秦的位盍#endifCirQueue.cppLd/CirQueue. cppinclude
6、 'CirQueue. h"template <class T> l£CirQtieue<T>: CirQueue ()front=rear=O:田禹明template <class T>-CirQueue<T?;SCixQUBUB()*template <cla5S T> Fvoid CirQueueKT?:EriQueue (T x)if (raar41) % QueueSize =front) throiw "上益": rear=(rear+C % QueueSize;臥昆指针在fit评
7、意义下加1data rear =s :/ / PA 处幡入元寰template <class T>I- T CirQueue<T>::DeQueue()队头指针在僭开意冥T加1读取并返回出队前的从咲元章*注烹疏头指针if rear=frout) throif ' "FS317: fronts (front+l) K Que-uaSize ; return data front:teatplacte clasS T)-T C i rQueue< T > : Gt Queue ()int 1,if <reaxfront) -thtrow
8、"下益Ji= (froivt+1)幣g&xSi砖;"注意不要给臥头指针赋值 d讥i;田声明tamp late <class T>-bool CirQueue<T>:!Empty() if (front=rear)return 1:«lserftturn 0,CirQueueMa in. cppzzl/CirQ»ueueNain. cppincliide <iostreajuz using najnespacs st d: 畫 include "Ci rQueue * cpp-Ivo id irnaih ()
9、匚LrQueue<int>a:"弓I用辅入输出济"引入成员函数文件/7创崖模版类的实例if (a. Empty C)icout«"術坏陆列空对1U觇行入EA.换作<<<endl:t rya. Enqueue (10) :/A PA 作catch(c!ha.r* wrong)ccut<<wiong;cout«ff淇取臥头元麦:*«end.l:cout«x QetQueuet ) «endl:/iPA头元素cout«Yat 1 BillfrA PA 操作! "
10、;<<endl:trya. EnQueue(L5):catchC(?ha.r* if tong)cout<<viorig;cout«ff滾取队头云査:RT«endl.c out« 乩 C etQue口庄()« endl:aout<Clk行出弘按作广<“mH: 出臥操作a. DeQueue ():cout«'7读取队头元蓑:"«endl; c out «a, G etQueus ( ) «endlelse cout'«vJiF:PAlJ不空,v&
11、#171;endl:六、链队列链队列与顺序队列大致相同,只是用链表来表示而已。链队列的队头指针 指向头结点,队尾指针指向终端节点。基本数据结构:classL in kQueuepublic:Lin kQueue( );/构造函数,初始化一个空的链队列Li nkQueue( );/析构函数,释放链队列中各结点的存储空间void EnQueue(T x);将元素 x入队T DeQueue( );/将队头元素岀队T GetQueue( );/取链队列的队头元素bool Empty( );/判断链队列是否为空private:Node<T> *fron t, *rear; /队头和队尾指针,
12、分别指向头结点和终端结点;思想与顺序队列一致。需要注意的是对节点的增加和删除。在EnQueue() 中,将新申请的节点接在rear后,再让rear=新节点。在DeQueue () 中, 要暂存队头元素,用来返回,再摘链。运行结果和程序:/LinkQueue. hI- #ifndef LINKQtrEUE.H# def me LINKQUEUE_Htemplate <class ?>3struct No deT data;"此無ST也可臥省隔I ;template <class r>:class LinkQueiiepublic;LinkQueue();Tink
13、Queue C ), vflid EriQueue (I s): T DeQueue (): T GetQueue(); bool Empty ();private:"构產画数,初怡化一吓空的謎队列/析构函ih肆毓無EA列中各结直的存储空河牌元寒龙入队将甌头元素出肌"取锥从列的阴头元君"和断销恥刘是習购空Node<T> *frent? *rear:"队头和疏尾指料,分别指向头结点和终端结点#endif; /L liiltQtietie. cpp5 include ' LirLkQueuE?. h."tenplsite <
14、;elass T>-LirikQueue<T> : : Link(iu.eue () Naris CT)粘:Mede<7>: s->next=MILL: front=r?ar=s:tenplate Cclass T>-LirJtQuetie<T>: :'"LinkQueue () vhile (front)Nadje VT、*p ; p=£ r n't; delete front.£ron,t=:p ,1: emplat e class T、E7void LinkQueue<T>:E
15、nQueue(T is)Wcde<T> *s:snew Mode<T>;s->dart:"申请一个数t?域为弱的结点启s->next 二 NULL;rear->nex-t=E;"将结点$插入到队匡rearms;因|声明template <class T>T LinkQueue<T>:DeQueue()IWo de <T> *p : int x :"暂存甌土元素"将臥头元重丽在站点捕貼"判断出甌前瓯別长盛是若酋1if (r&ar=fronrt) throw &q
16、uot;吕一; pfrant->neKt;x=p->dat a:front->nftxt=p->n.ex't ,if (p->nextNULL) rear=f roirt ; delete p:return k:K声明te <class T>El T 1 inlcQueiift<T>:Ge+Que-uc ()if Cfron-t !=rear)caturn frontdat a.tempLate <class T>Qbool LirMueu0(T>: Kipty()Iif (f roiit=匚巳直)relurn 1
17、.elsereturn 0:J /,/L inkQ neu'eMain. cpp iinclude<ios tugajii using najnespace std : ?incLude"LinkQueue* cpp"-Jvcid ina.irL ()LinliQueue<int> a:if (a.EnptyO) "引用输入输出凉"引入咸員函埶文件/创逢模版賞的实例cout«AsS410执行入弘換作:*": try出Enqueue (10):"人尿操作cat ch Cchar* urong)cent« ron£:cout«" W看甌头元養r«endl:cout<<a. CetQueue( )«endl: "谟臥头云表cout<C ii 151iL It A PA 4 作:J«endl: trya. Enqueue (15:': catchCchart wrong)cout
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 44774-2024汽车信息安全应急响应管理规范
- 2024年度桥梁拆除工程承包合同
- 2024年度知识产权许可合同许可项目与许可费用
- 2024年度电商平台物流配送合同
- 2024年度智能家居产品买卖及安装合同2篇
- 《铁路知识学习材料》课件
- 2024年度技术开发合作合同:科技公司与研发团队共同开展新技术研究的协议
- 2024年度手机销售合同市场推广及售后服务
- 工业网络控制技术 课件 项目3 简单CPU通信应用
- 2024年度环保科技公司污染治理合同3篇
- 2024新苏教版一年级数学册第三单元第1课《图形的初步认识》课件
- 第10课时-小人物-大情怀-单元总结-七年级语文下册(部编版)
- (正式版)HGT 22820-2024 化工安全仪表系统工程设计规范
- 综合实践活动课《早餐与健康》优质课件
- 《中华民族共同体概论》考试复习题库(含答案)
- 初中生数学探究性学习能力培养略谈
- 色彩构成—明度九调作业要求
- 工程钻机产品合格证
- 六壬高级教程
- 员工奖惩制度 公司员工奖惩制度范本
- 不锈钢栏杆施工方案
评论
0/150
提交评论