课程设计报告队列问题_第1页
课程设计报告队列问题_第2页
课程设计报告队列问题_第3页
课程设计报告队列问题_第4页
课程设计报告队列问题_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.z.-----优质资料课程设计报告题目:"队列问题"院系:计算机科学与应用系专业年级:计算机科学与技术学号:学生**:指导教师:2013年6月29日需求分析1.1功能需求链队列根本操作的实现:链队列的初始化,生成一个空链队列;链队列的撤消,即删除队列中的所有结点,仅留下指针结点;链队列的入队操作,即在队列的队尾插入一个元素e,即修改队尾指针;链队列的出队操作,即返回队首结点的元素值并删除队首结点;返回元素的第一个值;设计一个菜单,具有上述要求的所有功能、退出系统等最根本的功能。1.2输入的形式和输入值的*围、输出的形式程序输入:根据主界面提示,输入所选的操作,并根据提示按"2〞键输入元素。假设为非法输入,系统会做出提示。程序输出:输入想要操作的选项,便能输出与之对应的结果,接着输入下次操作选项,按"0〞退出主页面。1.3设计内容1.建立一个空链队列;2.插入一个元素;3.删除元素;4.返回元素的第一个值;5.消除队列;1.4运行环境〔1〕WINDOWS7/*P系统〔2〕visualC++6.0编译环境2、概要设计2.1该系统的功能简介实现链队列的初始化,生成一个空链队列;链队列的撤消,即删除队列中的所有结点,仅留下指针结点。链队列的入队操作,即在队列的队尾插入一个元素e,即修改队尾指针。链队列的出队操作,即返回队首结点的元素值并删除队首结点;设计一个菜单,具有上述要求的所有功能、退出系统等最根本的功能。2.2总体程序框图进入程序进入程序构建队列插入元素删除元素消除队列退出程序返回元素3、详细设计3.1构造空队列StatusInitqueue(Linkqueue&Q){Q.front=Q.rear=(Queueptr)malloc(sizeof(Qnode));if(!Q.front)return(OVERFLOW);//存储分配失败Q.front->ne*t=NULL;returnOK;}//构造一个空队列3.2消除队列StatusDestroyqueue(Linkqueue&Q){while(Q.front){Q.rear=Q.front->ne*t;free(Q.front);Q.front=Q.rear;}returnOK;}//销毁队列3.3插入新元素StatusEnqueue(Linkqueue&Q,Qelemtypee)//插入元素e,为Q新的队尾元素{Queueptrp;p=(Queueptr)malloc(sizeof(Qnode));if(!p)return(OVERFLOW);p->data=e;p->ne*t=NULL;Q.rear->ne*t=p;Q.rear=p;returnOK;}//插入新元素3.4删除队头元素StatusDequeue(Linkqueue&Q,Qelemtype&e){Queueptrp;//假设队列不空,则删除Q的对头元素,用e返回其值,并返回OK//否则返回ERRORif(Q.front==Q.rear)returnERROR;p=Q.front->ne*t;e=p->data;Q.front->ne*t=p->ne*t;if(Q.rear==p)Q.rear=Q.front;free(p);returnOK;}//删除队头元素3.5返回队头元素Statusgetfirst(Linkqueue&Q){if(Q.front==Q.rear){returnERROR;}elsereturnQ.front->ne*t->data;}//返回队列的第一个元素3.6主函数main(){LinkqueueQ;Qelemtypee,n,i;charselect;do{printf("请输入您的选择:\n\n");printf("1.构造一个空队列\n");printf("2.向队列中插入元素\n");printf("3.删除队列中的元素\n");printf("4.销毁队列\n");printf("5.返回队列的第一个元素\n");printf("0.退出程序\n");printf("您的选择是:");select=getchar();switch(select){case'1':if(Initqueue(Q))printf("构造成功\n");elseprintf("构造失败\n");break;case'2':printf("你想插入多少个元素:");scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&e);if(Enqueue(Q,e)!=OK)returnERROR;}break;case'3':if(Dequeue(Q,e))printf("你删除的对头元素是:%d\n",e);elseprintf("删除失败\n");break;case'4':if(Destroyqueue(Q))printf("销毁队列成功\n");elseprintf("销毁失败\n");break;case'5':{ inta;printf("队列的第一个元素是:\n");a=getfirst(Q); printf("%d",a);}break;default:printf("您的输入不服规*,请重新输入!");}getchar();printf("\n\n");}while(select!='0');}3.7函数的调用关系图开场开场Main函数InitqueueEnqueueDestroyqueue函数Getfirst函数完毕函数的关系调用图4、调试分析4.1、问题的解决在调试过程中,出现错误,根据visualC++6.0的检错找到错误所在,然后错误行附近寻找错误所在,进而改正错误;遇到找不到和不能改正的错误,就向教师,同学,网络寻求帮助。4.2、经历和体会必须结实掌握根底知识。由于C语言是大一所学知识,有所遗忘,且未掌握好这学期所学的"数据构造"这门课,所以在实习之初感到棘手。不知如何下手,但在后来的实习过程中自己通过看书和课外资料,并请教其他同学,慢慢地对C语言和数据构造知识有所熟悉。这时才逐渐有了思路。所以,这次实习之后,我告诫自己:今后一定要结实掌握好专业根底知识。必须培养严谨的科学态度。自己在编程时经常因为一些类似于"少了分号〞的小错误而导致错误,不够认真细致,这给自己带来了许多麻烦。编程是一件十分严谨的事情,容不得马虎。所以在今后自己一定要培养严谨的科学态度。我想这不仅是对于程序设计,做任何事都应如此。这次课程设计也让我充分认识到"数据构造"这门课的重要性。它给我们一个思想和大纲,让我们在编程时容易找到思路,不至于无章可循。同时它也有广泛的实际应用。在课程设计时遇到了很多的问题,在教师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的开展打下了坚实的根底。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经历,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。5、用户使用说明在VC环境下编译连接后,根据主页面的提示输入选择,第一步,先输入"1〞构造一个空队列,接着向空对列中插入元素,此时选"5〞返回第一个元素,如果此时选"3〞,删除队头元素,再返回首元素时,返回删除后的下一个元素。6、测试结果6.1主界面6.2建立队列6.3插入元素6.4返回队头元素6.5删除元素6.5销毁队列7、附录#include"stdio.h"#include"stdlib.h"#include"stdio.h"#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineINFEASIBLE-1#defineOVERFLOW-2typedefintQelemtype;typedefintStatus;typedefstructQnode{Qelemtypedata;structQnode*ne*t;}Qnode,*Queueptr;typedefstruct{Queueptrfront;Queueptrrear;}Linkqueue;StatusInitqueue(Linkqueue&Q);StatusDestroyqueue(Linkqueue&Q);StatusEnqueue(Linkqueue&Q,Qelemtypee);StatusDequeue(Linkqueue&Q,Qelemtype&e);Statusgetfirst(Linkqueue&Q);StatusInitqueue(Linkqueue&Q){Q.front=Q.rear=(Queueptr)malloc(sizeof(Qnode));if(!Q.front)return(OVERFLOW);Q.front->ne*t=NULL;returnOK;}//构造一个空队列StatusDestroyqueue(Linkqueue&Q){while(Q.front){Q.rear=Q.front->ne*t;free(Q.front);Q.front=Q.rear;}returnOK;}//销毁队列StatusEnqueue(Linkqueue&Q,Qelemtypee){Queueptrp;p=(Queueptr)malloc(sizeof(Qnode));if(!p)return(OVERFLOW);p->data=e;p->ne*t=NULL;Q.rear->ne*t=p;Q.rear=p;returnOK;}//插入新元素StatusDequeue(Linkqueue&Q,Qelemtype&e){Queueptrp;if(Q.front==Q.rear)returnERROR;p=Q.front->ne*t;e=p->data;Q.front->ne*t=p->ne*t;if(Q.rear==p)Q.rear=Q.front;free(p);returnOK;}//删除队头元素Statusgetfirst(Linkqueue&Q){if(Q.front==Q.rear){returnERROR;}elsereturnQ.front->ne*t->data;}//返回队列的第一个元素#include"stdio.h"main(){LinkqueueQ;Qelemtypee,n,i;charselect;do{printf("请输入您的选择:\n\n");printf("1.构造一个空队列\n");printf("2.向队列中插入元素\n");printf("3.删除队列中的元素\n");printf("4.销毁队列\n");printf("5.返回队列的第一个元素\n");printf("0.退出程序\n");printf("您的选择是:");select=getchar();switch(select){case'1':if(Initqueue(Q))printf("构造成功\n");elseprintf("构造失败\n");break;case'2':printf("你想插入多少个元素:");scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&e);if(Enqueue(Q,e)!=OK)returnERROR;}break;case'3':if(Dequeue(Q,e))printf("你删除的对头元素是:%d\n",e);elseprintf("删除失败\n");break;case'4':if(Destroyqueue(Q))printf("销毁队列成功\n");elseprintf("销毁失败\n");break;case'5':{ inta;printf("队列的第一个元素是:\n");a=getfirst(Q); printf("%d",a);}break;default:printf("您的输入不服规*,请重新输入!");}getchar();printf("\n\n");}while(select!='0');}参考文献[1]赵国玲.C语言与数据构造[M].:电子工业,[2]严蔚敏,吴伟民.数据构造〔C语言版〕[M].:清华大学,[3]严蔚敏.数据构造C语言[M].:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论