当前位置: 首页 > news >正文

黄石网站建设黄石福建建设执业中心网站

黄石网站建设黄石,福建建设执业中心网站,网页打不开无法连接服务器,手机网站关键实验六 队列 一、实验目的与要求 1#xff09;熟悉C/C语言#xff08;或其他编程语言#xff09;的集成开发环境#xff1b; 2#xff09;通过本实验加深对队列的理解#xff0c;熟悉基本操作#xff1b; 3#xff09; 结合具体的问题分析算法时间复杂度。 二、…实验六  队列 一、实验目的与要求 1熟悉C/C语言或其他编程语言的集成开发环境 2通过本实验加深对队列的理解熟悉基本操作 3  结合具体的问题分析算法时间复杂度。 二、实验内容 设计你的循环队列实现。 循环队列是一种线性数据结构其操作表现基于 FIFO先进先出原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里一旦一个队列满了我们就不能插入下一个元素即使在队列前面仍有空间。但是使用循环队列我们能使用这些空间去存储新的值。 你的实现应该支持如下操作 MyCircularQueue(k): 构造器设置队列长度为 k 。 Front: 从队首获取元素。如果队列为空返回 -1 。 Rear: 获取队尾元素。如果队列为空返回 -1 。 enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。 deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。 isEmpty(): 检查循环队列是否为空。 isFull(): 检查循环队列是否已满。 三、实验结果 1请将调试通过的源代码粘贴在下面。代码注意书写规范、主要模块要有功能注释 源代码 #include iostream using namespace std;template typename T class MyCircularQueue{T * data;//当前位置的数据 int front,rear,size;//头指针、尾指针、队列长度 public://MyCircularQueue(k): 构造器设置队列长度为 k 。MyCircularQueue(int k0){datanew T[k1];//k1 - 区分isEmpty和isFull的判断条件 frontrear0;sizek1;}//Front: 从队首获取元素。如果队列为空返回 -1 。T Front(){if(isEmpty()){return -1;}else{return data[front];}}//Rear: 获取队尾元素。如果队列为空返回 -1 。T Rear(){if(isEmpty()){return -1;}else{return data[rear-1];}}//enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。bool enQueue(T value){if(isFull()){return 0;}else{data[rear]value;rear(rear1)%size;return 1;}} //deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。bool deQueue(){if(isEmpty()){return 0;}else{front(front1)%size;return 1;}}//isEmpty(): 检查循环队列是否为空。bool isEmpty(){if(rearfront){return 1;}else{return 0;}}//isFull(): 检查循环队列是否已满。bool isFull(){if((rear1)%sizefront){return 1;}else{return 0;}} };int main(){//初始化循环链表int len;coutPlease input the length of your queueendl;cinlen; MyCircularQueue int queue(len);//查看空表 if(queue.isEmpty() 1){coutThe current queue is emptyendl;}else{coutThe current queue is not emptyendl;}coutThe front now is queue.Front() endl;coutThe rear now is queue.Rear() endl;coutendl;//输入元素 int times;coutPlease select the times you want to inputendl;cintimes;int i0;for(;itimes;i){int value;coutPlease input your valueendl;cinvalue;int tqueue.enQueue(value); if(t1){coutValid inputendl;}else{coutInvalid inputendl;break;}}coutendl;//判断输入后的情况 if(queue.isEmpty() 1){coutThe current queue is emptyendl;}else{coutThe current queue is not emptyendl;}coutThe front now is queue.Front() endl;coutThe rear now is queue.Rear() endl;coutendl;//删除元素 int dels;coutPlease select the times you want to deleteendl;cindels;int ii0;for(;iidels;ii){int ttqueue.deQueue(); if(tt1){coutValid deleteendl;}else{coutInvalid deleteendl;break;}}coutendl;//判断删除后的情况if(queue.isEmpty() 1){coutThe current queue is emptyendl;}else{coutThe current queue is not emptyendl;}coutThe front now is queue.Front() endl;coutThe rear now is queue.Rear() endl;coutendl;return 0; }结果展示 2请分析你程序中每个功能模块的算法时间复杂度。 构造循环队列只需要设置队列长度为k1并设置相应数组同时初始头指针和尾指针为0即可。所以时间复杂度为O(1)。 判断循环队列是否为空队列只需要判断头指针是否与尾指针重合即可即returnrearfront。所以时间复杂度为O(1)。 判断循环队列是否为空队列只需要判断尾指针加一取余后是否与头指针重合即可即returnrear1%sizefront。所以时间复杂度为O(1)。 获取队首元素只需要先判断循环队列是否为空队列如果队列非空则直接返回头指针所对应的元素。所以时间复杂度为O(1)。 获取队尾元素只需要先判断循环队列是否为空队列如果队列非空则直接返回尾指针所对应的元素。所以时间复杂度为O(1)。 向循环队列插入一个元素只需要先判断循环队列是否为满队列如果队列非满则直接插入输入元素并重置尾指针。所以时间复杂度为O(1)。 从循环队列中删除一个元素只需要先判断循环队列是否为空队列如果队列非空则直接改变头指针的位置即可删除队首元素。所以时间复杂度为O(1)。 其他 #includestdlib.h #includeiostream using namespace std; #define SIZE 6 #define Type char typedef struct{Type *elem;int front,rear,length;//注意队列的所谓的指针不是指针是int }Queue; bool isEmpty(Queue Q)//: 检查循环队列是否为空。 {if(Q.rearQ.front){return 1;}else{return 0;} } bool isFull(Queue Q)//: 检查循环队列是否已满。 {if((Q.rear1)%Q.lengthQ.front){return true;}else{return false;} } void MyCircularQueue(Queue Q,int k)//: 构造器设置队列长度为 k 。 {Q.lengthk;Q.elemnew Type[Q.length];Q.frontQ.rear0;cout长度为k的队列构造完毕endl; } int Front(Queue Q,Type e)//: 从队首获取元素。如果队列为空返回 -1 。 {if(isEmpty(Q)){cout空队列endl; return -1;}else{eQ.elem[Q.front];cout非空endl; cout队首元素e获取成功endl;return 1;} } int Rear(Queue Q,Type e)//: 获取队尾元素。如果队列为空返回 -1 。 {if(isEmpty(Q)){cout空队列endl;return -1;}else{cout非空endl;if(Q.rear0){eQ.elem[5];cout队尾元素e获取成功endl;return 1;}else{eQ.elem[Q.rear-1];cout队尾元素e获取成功endl;return 1;}} } bool enQueue(Queue Q,Type value)//: 向循环队列插入一个元素。如果成功插入则返回真。 {if(!isFull(Q)){cout非满endl;Q.elem[Q.rear]value;//因为初始front和rear都是0开头所以与下标一致 Q.rear(1Q.rear)%Q.length;coutvalue已经插入endl;return true;}else{cout队列已满!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!value无法入队endl; return false;} } int deQueue(Queue Q,Type e)//: 从循环队列中删除一个元素。如果成功删除则返回真。 {if(isEmpty(Q)){cout已空endl;return -1;}else{cout非空endl;eQ.elem[Q.front];Q.front(Q.front1)%Q.length;cout删除了eendl;return 1;} } int getlength(Queue Q) {int len;len(Q.rear-Q.frontQ.length)%Q.length;return len; } int main() {Queue a;Type temp;Type e[11]{a,b,c,d,e,f,g,h,i,j,k};int lengthSIZE;MyCircularQueue(a,length);//初始化 enQueue(a,e[0]);//入队到第一次满 enQueue(a,e[1]);enQueue(a,e[2]);enQueue(a,e[3]);enQueue(a,e[4]);if(isFull(a))//判断是否已满 {cout队列已满!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!endl;} deQueue(a,temp);//删除队首 Front(a,temp);//输出队首队尾元素 Rear(a,temp);enQueue(a,e[5]);//插入两次看看当队列已满溢出时的效果 证明了程序在溢出时的插入无效 enQueue(a,e[6]);//队列以满试图插入的这个是g查看满后队列是否可以阻止进入 cout该队列长度为getlength(a)endl; Front(a,temp);//再次确定 1.队列确实是循环使用的即0号位被再次利用 2.溢出的那一次插入无效 Rear(a,temp); }
http://www.hyszgw.com/news/81315/

相关文章:

  • 自己怎样建设淘宝返现网站杭州百度代理公司
  • 长春火车站建在哪里短视频网站平台怎么做
  • 怎样做营销型网站推广济南网站建设公司哪个好点呢
  • 黄页网站营销网页设计模板html代码软件
  • 选择邯郸网站制作用什么编程语言做网站好
  • 免费网站推广网站在线家电维修做网站生意怎么样
  • 交流平台网站怎么做不了网商之窗高仿手表
  • 零基础学建网站公司网站建设一条
  • 阿里云服务的官方网站东莞网站网络推广公司
  • 阳泉建设网站的公司佛山响应式网站开发
  • 网站搭建app建设网站素材
  • 个人建站模板手机网站开发的目的
  • 来宾网站seo网络营销的本质是
  • 秦皇岛项目建设wordpress缓存优化
  • 网站建设规范布局有几部分手套外包加工网
  • 营销型外贸网站建设公司互联网公司排行
  • 阿里巴巴开店网站怎么做百度搜索高级搜索
  • 微网站模板标签建站工具 wordpress
  • 免费做logo的网站wordpress 插件 摘要
  • 移动网站建设哪家便宜seo网站推广的主要目的不包括
  • 建交互网站需要多少钱2022最新国际国内新闻
  • 给女友做网站建设一个网站的方法
  • 运河建设管理有限公司网站备案网站首页地址
  • 北京网站优化wordpress 主题在哪看
  • 陵水媒体建站哪家好阿里云建站方案
  • cn免费域名注册网站广州网页设计多少钱
  • 做html网站模板做的物流网站
  • 北京外语网站开发公司提供服务的网站
  • 赚钱做网站房地产销售税率是多少
  • 莱阳网站建设张掖网站建设