顺序队的基本操作

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

上机实验报告学院:计算机与信息技术学院专业:计算机科学与技术(师范)课程名称:数据结构实验题目:顺序队的基本操作班级序号:师范1班学号:201421012731学生姓名:邓雪指导教师:杨红颖完成时间:2015年12月25号一、实验目的:1.熟悉掌握队的定义、结构及性质;2.熟练掌握循环队列的操作及应用,掌握循环队列的入队和出队等基本操作。3.加深对队列结构的理解,逐步培养解决实际问题的编程能力二、实验环境:Windows8.1MicrosoftVisualc++6.0三、实验内容及要求:掌握队列的概念及性质,并建立顺序队,实现如下功能:1.建立一个顺序队2.输出队3.求队长4.判队空5.取队头6.入队7.出队8.清空栈四、概要设计:1、通过循环,由键盘输入一串数据。创建并初始化一个顺序队。2、编写实现相关功能函数,完成子函数模块如下。3、调用子函数,实现菜单调用功能,完成顺序表的相关操作。main建队求队长出队取队顶入队清空队判队空五、代码#includestdio.h#includestdlib.h#definemaxsize1024typedefintdatatype;//定义结构体typedefstruct{datatypedata[maxsize];intfront,rear;}sequeue;sequeue*sq;//建立顺序队sequeue*SET(){sequeue*sq;datatypex;sq=(sequeue*)malloc(sizeof(sequeue));sq-front=maxsize-1;sq-rear=maxsize-1;printf(请输入要存入的结点值(以0结尾)\n);scanf(%d,&x);while(x!=0){sq-rear=(sq-rear+1)%maxsize;sq-data[sq-rear]=x;scanf(%d,&x);}printf(顺序队输入成功\n\n);returnsq;}//判队空intEMPTY(sequeue*sq){if(sq-rear==sq-front)return1;elsereturn0;}//输出voidPRINT(sequeue*sq){inti;if(EMPTY(sq))printf(sequeueisempty\n);else{i=(sq-front+1)%maxsize;while(i=sq-rear){printf(%d,sq-data[i]);i=(i+1)%maxsize;}}}//队长度intLENGTH(sequeue*sq){intcount=0,i;if(EMPTY(sq))returncount;else{i=(sq-front+1)%maxsize;while(i=sq-rear){count++;i=(i+1)%maxsize;}returncount;}}//取队头datatypeFRONT(sequeue*sq){datatypex;if(EMPTY(sq)){printf(sequeueisempty\n);returnNULL;}else{x=sq-data[(sq-front+1)%maxsize];returnx;}}//入队voidENQUEUE(sequeue*sq){datatypex;printf(请输入要插入的结点值\n);scanf(%d,&x);if(sq-front==(sq-rear+1)%maxsize){printf(sequeueisfull\n);exit(0);}else{sq-rear=(sq-rear+1)%maxsize;sq-data[sq-rear]=x;printf(插入成功\n);}}//出队datatypeDEQUEUE(sequeue*sq){if(EMPTY(sq)){printf(sequeueisempty\n);returnNULL;}else{sq-front=(sq-front+1)%maxsize;return(sq-data[sq-front]);}}//置空队voidSETNULL(sequeue*sq){sq-front=maxsize-1;sq-rear=maxsize-1;}//主函数voidmain(){sequeue;inta,p;printf(\n——————————————————————————————————\n);printf(1、建立队\n);printf(2、输出队\n);printf(3、队长度\n);printf(4、判队空\n);printf(5、取队头\n);printf(6、入队\n);printf(7、出队\n);printf(8、清空队\n);printf(9、退出程序\n);printf(\n——————————————————————————————————\n\n);do{printf(按需求选择功能:);scanf(%d,&a);switch(a){case1:sq=SET();break;case2:printf(该队列内容为:\n\n);PRINT(sq);break;case3:printf(队长度为:%d\n\n,LENGTH(sq));break;case4:if(EMPTY(sq))printf(sequeueisempty\n);elseprintf(sequeueisnotempty\n);break;case5:p=FRONT(sq);printf(队头元素为:%d\n,p);break;case6:ENQUEUE(sq);printf(插入新元素后的队为:\n\n);PRINT(sq);break;case7:printf(出队操作前队头元素为:%d\n,DEQUEUE(sq));printf(出队后队列内容为:\n);PRINT(sq);break;case8:SETNULL(sq);if(EMPTY(sq)){printf(顺序队已清空:);PRINT(sq);}break;case9:printf(感谢使用\n);exit(0);default:printf(inputerror\n);}}while(1);}六、运行界面菜单功能七、实验中遇到的问题及总结主函数中变量的类型和子函数中类型不匹配,通过不断调试解决了问题。队列也是一种运算受限的线性表,它只允许在表的一端进行插入,而在另一端进行删除。允许删除的一端称为队头,允许插入的一端称为队尾。队列称为“先进先出”的线性表。通过这个实验,熟练地掌握了顺序队的基本操作和应用,但是仍有许多不足之处需要改进,会一直坚持调试程序来锻炼自己。八、参考文献《数据结构——用C语言描述》

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功