首页 循环队列的实现与运算 数据结构

循环队列的实现与运算 数据结构

举报
开通vip

循环队列的实现与运算 数据结构循环队列的实现与运算 数据结构 电子信息学院 实验报告书 课程名: 数据结构 题 目: 循环队列的实现和运算 实验类别 设计 班 级: 学 号: 姓 名: 2011年10 月 17 日 《算法设计与分析 》实验报告 - 1 - 1、实验题目 (1) 掌握队列 “先进先出”的特点; (2) 复习队列的入队、出队、插入、删除等基本运算。 (3) 掌握循环队列的特点,以及循环队列的应用。 2、实验内容 (1) 在顺序存储结构上实现输出受限制的双端循环队列的入队和出队(只允许队头输出)算法。 (2) 设...

循环队列的实现与运算 数据结构
循环队列的实现与运算 数据结构 电子信息学院 实验 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 书 课程名: 数据结构 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 目: 循环队列的实现和运算 实验类别 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 班 级: 学 号: 姓 名: 2011年10 月 17 日 《算法设计与分析 》实验报告 - 1 - 1、实验题目 (1) 掌握队列 “先进先出”的特点; (2) 复习队列的入队、出队、插入、删除等基本运算。 (3) 掌握循环队列的特点,以及循环队列的应用。 2、实验内容 (1) 在顺序存储结构上实现输出受限制的双端循环队列的入队和出队(只允许队头输出)算法。 (2) 设每个元素 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示一个待处理的作业,元素值表示作业的预计时间。入队列采取简化的短作业 优先原则,若一个新提交的作业的预计执行时间小于对头和队尾作业的平均时间,则插入在 队头,否则插入在队尾。 (3) 循环队列数据类型: #define MAXLEN 10 typedef struct { int data[MAXLEN]; int front,rear; }csequeue; (4)入队作业处理的预计执行时间可以用随机数函数rand()产生,也可以从键盘输入。 3、实验要求 (1) 利用C(C++)语言完成算法设计和程序设计。 (2) 上机调试通过实验程序。 (3) 输入数据,检验程序运行结果。 (4) 给出具体的算法分析,包括时间复杂度和空间复杂度等。 (5) 撰写实验报告。 4、实验步骤与源程序 ? 实验步骤 首定义MAXLEN=10,然后初始化队列,再定义数据类型、头、尾指针。下面定义五个函数,分别是入队函数、出队函数、显示函数和长度计算函数。在入队时要判断是否队满,队满不能入队。出队要判断队是否为空,队空不能出队。判断队列长度的函数,用队尾指针与队首指针之差来计算。最后的主函数是一个队列菜单和相应的对函数的调用,菜单界面主要通过printf()函数来实现,下面一一对应有switch()语句来实现。 ? 源代码 #include #define MAXLEN 10 typedef struct { int data[MAXLEN]; // 定义数据的类型 int front,rear; // 定义队头、队尾指针 }csequeue; 《算法设计与分析 》实验报告 - 2 - csequeue q; void IniQueue() // 初始化队列 { q.front=q.rear=MAXLEN-1; } void InQueue() // 入队函数 { int x ; printf("\n\t\t 输入一个入队的整数数据:"); scanf("%d",&x); if (q.front==(q.rear+1) % MAXLEN ) { printf("\n\t\t 队满,不能入队! \n"); return; } q.rear=(q.rear+1) % MAXLEN; q.data[q.rear]=x; printf("\n\t\t 入队成功! \n"); } void Outsequeue() // 出队函数 { if (q.front==q.rear) { printf ("\n\t\t 此队列为空! "); return ;} // 队空不能出队 else { q.front=(q.front+1) % MAXLEN; printf("\n\t\t 出队元素为:%d\n",q.data[q.front]); // 输出队头元素 return; } } void ShowQueue() // 显示函数 { int k=q.front; if (k==q.rear) { printf("\n\t\t 此队列为空! \n"); return;} printf("\n\t\t 此队列元素为:"); do { k=(k+1)%MAXLEN; printf("%4d",q.data[k]); 《算法设计与分析 》实验报告 - 3 - } while(k!=q.rear); printf("\n"); } int length() { int k; k=(q.rear-q.front+MAXLEN)% MAXLEN; return k; } void main() // 主函数 { int i=1; int choice; IniQueue(); while (i) { printf("\n\t\t 循 环 队 列\n"); printf("\n\t\t***************************************************"); printf("\n\t\t*** 1----------显 示 ***"); printf("\n\t\t*** 2----------进 队 ***"); printf("\n\t\t*** 3----------出 队 ***"); printf("\n\t\t*** 4----------求 队 列 长 度 ***"); printf("\n\t\t*** 0----------返 回 ***"); printf("\n\t\t***************************************************"); printf("\n\n\t\t 请选择菜单号: "); scanf("%d",&choice); switch(choice) { case 1: ShowQueue(); break; case 2: InQueue(); break; case 3: Outsequeue(); break; case 4: printf("\n\t\t 队列长度为: %d \n",length());break; case 0: i=0; break; 《算法设计与分析 》实验报告 - 4 - } } } 5、测试数据与实验结果(可以抓图粘贴) 《算法设计与分析 》实验报告 - 5 - 6、结果分析与实验体会 程序可以运行,结果正确,在实验中是对五个函数的调用,我在实验中更清楚的认识到队列跟栈的不同,队列是先进先出,栈是后进先出。但这个程序只有对一个元素的处理,入队、出队、显示、求长度,出栈后队列长度为0。进队是通过把新元素插入队尾,出队是输出队头元素。我再次加深了入队要判断栈满,用语句 q.front==(q.rear+1) % MAXLEN判断,入队有两种输入方法,队首和队尾。出队要判断队是否为空,用语句q.front==q.rear判断。如果不判断,会影响程序运行,也会使程序结果不完善。在定义队列时还要定义队列的最大容量,队头指针始终指向对头前面一个位置,队尾指针始终指向队尾元素,当两者指向一个单元,队列则为空。我认为这个实验让我们对队列的性质和应用更加熟悉,了解队列的初始化、入队、出队、显示函数。
本文档为【循环队列的实现与运算 数据结构】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_281650
暂无简介~
格式:doc
大小:44KB
软件:Word
页数:6
分类:互联网
上传时间:2017-09-19
浏览量:112