济南大学数据结构课程设计总结_第1页
济南大学数据结构课程设计总结_第2页
济南大学数据结构课程设计总结_第3页
济南大学数据结构课程设计总结_第4页
济南大学数据结构课程设计总结_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE1济南大学数据结构课程设计总结济南大学数据结构课程设计总结课程设计总结本次课程设计中,使用线性表的顺序存储结构、指针传递等编程思想,再次熟悉了顺序表的数据结构及存储结构,熟练使用指针传递及指针操作的。程序设计中,基本外框实现简单一些,一次编写并调试成功,在实现集合运算的三个子程序时显得稍微费时,包括只声明但没有实际创建用于保存的顺序表Lc运行时只看到内存使用错误但不知道具体位置浪费了时间;在执行并操作时按照最初设计是直接将位于Lb的元素而不存在于La的元素复制到La中,导致在后期操作交运算时出现结果错误,后期才将其调整为含有3个参数输入的子函数;另外声明三个顺序表时使用如下:Sqlistlist1,list2,list3;Sqlist*La,*Lb,*Lc;La=list1;Lb=list2;Lc=list3;的语句,相对而言有一定的不合理,但不知道具体该如何改进;在使用数据结构时,题目已经要求是整型数据元素,可以直接使用一维数组来操作,不过在控制循环时要用sizeof()库函数实现,另外在运算结果上要有值回传的实现,相对而言不如用指针方便;再分配存储空间时不合理,La和Lb的长度可以从终端输入在分配相应的空间大小,Lc的大小可以适当的根据La和Lb的长度动态的设定;在设计时间复杂度上可以改进,但没找到更好的方法。通过实践可以清楚的了解编程的细节及各个子函数与主函数的调用配合,熟悉并运用课本所学知识,从设定合适数据结构,设计各子函数功能及配合到时间复杂度和程序容错能力及改进都是对个人编程能力的锻炼和提高。另外编程时看清题目的功能是最关键的,否则会混乱程序结构且得不到想要的结果。扩展阅读:数据结构课程设计总结(模板)《数据结构》课程设计报告题目:班级:计算机系1001班姓名:王彩娟刘爽学号:4236指导教师:刘延岭日期:201*年7月3日一、课程设计目标1、问题描述以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用。2、问题分析汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。例如,(‘A’,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,5,20)表示5号牌照车在20这个时刻离去。整个程序可以在输入信息为(‘E’,0,0)时结束。本题可用栈和队列来实现。二、概要设计1、方案确定//头文件#include#include#include//函数返回状态代码#defineOK1#defineERROR0#defineTRUE1#defineFALSE0#defineINFEASIBLE-1#defineOVERFLOW-#defineSIZE5//停车场位置数typedefintStatus;//栈,模拟停车场typedefstructCar1{//车intnumber;//汽车车号intar_time;//汽车到达时间}CarNode;typedefstruct{//停车场CarNode*base;//停车场的堆栈底CarNode*top;//停车场的堆栈顶intstacksize;}Park;//队列,模拟便道typedefstructCar2{//车intnumber;//汽车车号intar_time;//汽车到达时间structCar2*next;}*CarPtr;typedefstruct{//便道CarPtrfront;//便道的队列的对头CarPtrrear;//便道的队列的队尾intlength;}Shortcut;StatusInitStack(ParkP){//初始化停车场P.base=(CarNode*)malloc(SIZE*sizeof(Car1));if(!P.base)exit(OVERFLOW);P.top=P.base;P.stacksize=0;returnOK;}StatusPush(ParkP,CarNodee){//车进入停车场*P.top++=e;++P.stacksize;returnOK;}StatusPop(ParkP,CarNodee){//车离开停车场if(P.top==P.base)printf("停车场为空。");else{e=*--P.top;--P.stacksize;}returnOK;}StatusInitQueue(ShortcutS){//初始化便道S.front=S.rear=(CarPtr)malloc(sizeof(Car2));if(!S.front||!S.rear)exit(OVERFLOW);S.front->next=NULL;S.length=0;returnOK;}StatusEnQueue(ShortcutS,intnumber,intar_time){//车进入便道CarPtrp;p=(CarPtr)malloc(sizeof(Car2));if(!p)exit(OVERFLOW);p->number=number;p->ar_time=ar_time;p->next=NULL;S.rear->next=p;S.rear=p;++S.length;returnOK;}StatusDeQueue(ShortcutS,CarPtrw){//车离开便道if(S.length==0)printf("通道为空。");else{w=S.front->next;S.front->next=S.front->next->next;--S.length;}returnOK;}StatusArrival(ParkP,ShortcutS){//对进站车辆的处理intnumber,ar_time;printf("请输入车牌号:");scanf("%d",number);printf("进场的时刻:");scanf("%d",ar_time);if(P.stacksizewhile(P.stacksize){Pop(P,e);if(e.number==number){flag=0;money=(le_time-e.ar_time)*2;ar_time=e.ar_time;break;}Push(P1,e);}while(P1.stacksize){Pop(P1,e);Push(P,e);}//车从停车场中出if(flag==0){if(S.length!=0){DeQueue(S,w);m.ar_time=le_time;m.number=w->number;Push(P,m);free(w);printf("车牌号为%d的车已由便道进入停车场\\n",m.number);}printf("停车费为%d,占用车位数为%d\\n",money,P.stacksize);}else{printf("停车场不存在牌号为%d的车\\n",number);}returnOK;}intmain(){intm=1;charflag;//选项ParkP,Q;ShortcutS;InitStack(P);InitStack(Q);InitQueue(S);while(m){printf("\\n停车场管理程序\\n");printf("===============================================\\n");printf("**A汽车进车场**\\n");printf("****\\n");printf("**D汽车出车场**\\n");printf("****\\n");printf("**E退出程序**\\n");printf("===============================================\\n");printf("请选择(A,D,E):");scanf("%c",flag);switch(flag){case"A":case"a":Arrival(P,S);break;//车进入停车场case"D":case"d":Leave(P,Q,S);break;//车离开停车场case"E":case"e":m=0;break;default:printf("Inputerror!\\n");break;}while(flag!="\\n")scanf("%c",flag);}}2、程序设计模块设计连接图3、模块功能描述①此停车场管理系统,主要分为以下若干模块:首先定义用来模拟停车场的堆栈以及用来模拟通道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。在主函数中首先调用option()函数,出现欢迎用户使用的主界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的界面,在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开、停车场内停放车辆的信息以及退出程序这四个函数模块。其中,在车辆的离开那个模块函数中又调用了打印离开车辆信息的函数,在停车场内停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以及显示便道上车辆信息的函数。最后,从调鼐的这四个函数中回到主函数结束整个程序的运行。②在以上各个模块中,出现的调用的函数为:voidInitStack(SeqStackCar*s);intInitQueue(LinkQueueCar*Q);option();intArrival(SeqStackCar*Enter,LinkQueueCar*W);voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W);voidPRINT(CarNode*p);voidList(SeqStackCarS,LinkQueueCarW);voidList1(SeqStackCar*S);voidList2(LinkQueueCar*W);4、模块间关系三、详细设计1、方法设计对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已。对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。2、程序流程图四、程序清单五、程序测试与运行结果停车场主界面:车子进入停车场:车子出停车场:车子不想进停车场六、课程设计总结在这一个星期中,自己用vc++做了一个停车场管理的应用系统,分别实现了系统的各大功能。在这次项目中,很用心去做,但是,在项目中也出现了很多的问题,最大的问题就是对程序设计框架结构的不了解,在实现代码与功能的连接时经常会出现各种不同的错误,在实现一些功能时系统常常会报错。许多错误不知从哪修改,以致托了整个设计的后腿。课程设计中,既回顾了很多以前的东西,也发现了很多的问题,以前都没遇见过的,收获很大。通过本次数据结构的课程设计,我学习了很多在上课没懂的知识,更巩固了课堂中学习有关于哈夫曼编码的知识,此次停车场管理的应用系统的设计让自己对数据结构的了解更深入,可以把它同实际相结合,同时,又让我们学会了如何更好的从网上查找资料,还有同班上同学的交流。虽然我对数据结构有了一定的掌握,但是到了真正使用,做课设的时候还是遇到了许多的问题。在仔细研究过课设要求和功能需求后,我有了初步的想法。在整个设计过程中,通过怎样对把各个管理信息连接起来的分析,锻炼了对事情的分析能力,通过怎样解决过程中出现的问题,提高了我们查找文献的能力、对网络资源的利用能力和和其他同学的交流沟通能力。而且,经历这次的课程设计,也学会了自学和分工协作。编写程序是件细心活,稍不留神就会出错,这就必须要求我们对待事情要认真!在编写程序的过程中,错误不断出现,不同的类型(如少写了一个符号,写错了字母,用错了函数等等)层出不穷,这考验我们待事细心,耐心,能不能坚持到底,不能半途而废。每一次的课程设计,都是让我们对原有的知识从了解表面到深入本质,从个体学习到整体把握的跳跃,对新知识的汲取,更是把课本的知识应用到实际中,让我们了解了我们的学习有什么用,能够解决什么样的问题,增加了自信和学习的动力。总之,通过这次的课程设计,我们收获匪浅首先由衷感谢老师提供这样一个锻炼自己的机会,感受到学来的知识不只是用来完成试卷的。一向惯于独立思考的自己学会了积极的同同学、朋友交流,取长补短,共同进步。课程设计使自己发现考试并不是最重要,最重要的是能运用所学的知识。在整个课程设计的学习过程中,不再是用学到的知识解题,而是在实际运

温馨提示

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

评论

0/150

提交评论