面向对象程序设计实验报告_04探究.doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面向对象程序设计实验报告  PAGE - 18 - 课 程 实 验 报 告 课程名称:面向对象程序设计 实验名称:面向对象的整型队列编程 院 系 :计算机科学与技术 专业班级 : CS1305 学 号 : U201314933 姓 名 : 严铭 指导教师 : 马光志 2015 年 12 月 30 日 需求分析 题目要求 整型队列是一种先进后出的存储结构,对其进行的操作通常包括判断队列是否为空、向队列顶添加一个整型元素、出队列等。整型队列类型及其操作函数采用面向对象的C++语言定义,请将完成上述操作的所有函数采用C++编程, 然后写一个main函数对队列的所有操作函数进行测试。 class QUEUE{ int *const elems; //申请内存用于存放队列的元素 const int max; //队列能存放的最大元素个数 int head, tail; //队列头和尾,队列空时head=tail;初始时head=tail=0 public: QUEUE(int m); //初始化队列:最多m个元素 QUEUE(const QUEUE s); //用队列s拷贝初始化队列 virtual operator int ( ) const; //返回队列的实际元素个数 virtual QUEUE operator(int e); //将e入队列,并返回队列 virtual QUEUE operator(int e); //出队列到e,并返回队列 virtual QUEUE operator=(const QUEUE s); //赋s给队列,并返回被赋值的队列 virtual void print( ) const; //打印队列 virtual ~QUEUE( ); //销毁队列 }; 需求分析 这里主要完成队列的8个功能,和之前的实验只有一点出入,首先是队列的初始化,然后是对初始化后的队列赋值,然后求队列的实际长度,这里不需要求队列的最大长度,其实和之前赋值的一样,设队列的最大长度是MAXSIZE40,入队和出队与之前栈的出栈入栈相反,这里是先进先出,使用头尾两个变量成员来完成,然后是对已经赋值过的队列再进行赋值,这里重新赋完值的队列会覆盖之前的元素。然后是队列的销毁,即析构函数。 系统设计 概要设计 这里要完成的是队列的基本操作,用到了C++中的虚函数,但是和上次试验一样,没有太大的作用。如上图所示,要求完成8大基本功能,除了队列的初始化,还有赋值初始化,在主函数中没有写出来,因为我觉得第6个功能可以包括这一项,对初始化的队列进行赋值。在入队和出队功能设计上队列是先进先出和栈的先进后出刚好相反,这里需要设置两个指针,分别表示头指针和尾指针,基本所有操作靠这两个指针的变化完成,所有这两个指针很重要,首先还是初始化,这个和栈的初始化没有什么不同,用关键字new进行空间分配,设队列最多m个元素,在函数体外完成elems(new int [m]),max(elems == NULL?0:m) ,然后在函数体写头指针等于尾指针等于0,此时为空队列。然后赋值初始化,因为此时队列为空,没有元素,所以直接将s的元素拷贝到初始化队列中。然后求队列实际元素,使用头尾指针的关系式得出。入队和入栈没有太大区别,只是此时位置要用尾指针取长度的余数,否则赋值可能超出范围,elems[tail%MAXSIZE] = e;因为尾指针可以移动,最后将尾指针加1即可。出队和入队同理,由于是先进先出,所以直接是头指针出队,e=elems[head%MAXSIZE];然后对队列赋值,将队列s赋给队列,若有之前入队列的值,这些值将被覆盖。打印队列同样使用一个循环,输出队列的每一个元素,只是此时要注意队列的实际长度,而且第一个元素不一定是从0开始,因为head是移动的,而头指针可能在尾指针的后面,所以需要进行取模,和入队出队一样,那么循环元素从j=(head+i)%MAXSIZE开始,i的值从0开始增加(tail-head+MAXSIZE)%MAXSIZE;这是队列的实际长度的求法,最后将所有的元素打印出来即可。销毁队列即析构队列,之前使用new关键字,这里使用delete进行销毁。 详细设计 和之前栈的操作一样,这里给出一个例子直观的看到队列的特点先进先出: 队列还有一个重要的特点是如何判断队空和队满,这里给出一种方法,其实海投别的方法,比如设一个标志位,但这里这样使用最简单: 给出图如下: 解决了这三个最重要的问题,队

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档