文档详情

数据结构实践报告

人***
实名认证
店铺
DOCX
122.05KB
约24页
文档ID:459044957
数据结构实践报告_第1页
1/24

河南财经政法大学院系:班级:指导老师:小组:小组成员:目录(一)设计目的3(二)问题描述3(三)概要设计4(四)详细设计8(五)调试分析9(六)测试分析10(七)心得体会1112八)附录(源代码)(一) 设计目的1.通过课程设计,了解并掌握数据结构的设计方法,具备初步的独立分析和设计能力;2.通过课程设计,初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.通过课程设计,提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.通过课程设计,训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风二) 问题描述及要求基本要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)栈以顺序结构实现,队列以链表结构实现测试数据设n=2,输入数据为:(‘A,1,5),('A,2,10),(‘D,1,15),(‘A',3,20),(‘A',4,25),(‘A'5,30),(‘D',2,35),(‘D,4,40),(‘E',0,0)。

其中:‘A'表示到达(arrival);‘D表示离去(departure);‘E'表示输出结束(end)实现提示需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现输入数据按到达或离去的时刻有序栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻此外还要实现:(1)两个栈共享空间,思考应开辟数组的空间是多少?(2)汽车可有不同种类,则他们的占地面积不同,收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积3)汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾三) 概要设计1、设计思想此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个栈,其中一个栈用来模拟停车场,另一个栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。

当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了2、实现方法对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了3、流程图分析流程图按块来分析,共分成整体系统,汽车到达系统,汽车离去系统,汽车显示系统1)汽车整体系统(2)以模块为单位分析算法1、“到达”模块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到是进入停车场进入便道V结束2•“离开”模块:离开时,当车库为空时,提示没有车,结束;否则车辆离开如图图3结束IJ四)详细设计此函数分为不同的函数,其中包含主函数,用此来调用其他子函数,其子函数包括车辆进车站、便道函数;车辆离开函数;车辆显示函数等。

1. 函数的定义:typedefstruct{intnum;/*车牌号*/intarrtime;/*到达/离开时间*/charcar;/*车的类型*/}ELEMTP;/*顺序栈的数据元素类型*/typedefstruct{ELEMTPelem[N];inttop;}SqStack;/*顺序栈类型*/typedefstructnode{intnum;/*车牌号/便道上的车辆数量*/structnode*next;}QNode;/*链队列的数据元素类型*/typedefstruct{QNode*front,*rear;}LQueue;/*链队列类型*/主函数为voidmain(),在此函数中用switch()函数来调用子函数其中车辆进入车站、便道的函数为voidArrive(SqStack*s1,LQueue*q,ELEMTPx);车辆离开函数为voidDelive(SqStack*s1,SqStack*s2,LQueue*q,ELEMTPx):车辆显示函数为voidDisplay(SqStack*s1,LQueue*q)五)调试分析由于此停车场管理系统是分模块设计的,而且在程序的实现过程中又使用了清屏函数,所以,运行时用户选择任务并且执行完任务结构清晰,使用方便。

本程序的调试运行,总体上情况良好,但中间也出现了一些小问题如当删除第3个元素时,出现了错误勒车场状舟车道车号十曹案馨鉴表M诜车,B代表客毛C代表卡车>:4.40"明明有4号车,却出现了提示错误,后经过调试,发现了问题,原来if(y.num二二x.num&&y.car二二x.car),这个判定限制了太多,当把其改为if(y.num==x.num),便不会再次出现此问题停车场状况:k道车号便道状况:车道车号IV°一504离开时间■车辆类型"代表”•,汽车.関第2号车位上亨车场状况:车道车号更道状况=便道没有玄辆(六)测试分析1.主界面"―“欢迎迸入停车场管理***请输入您的选择8显示停车场状祝A车辆到达D车辆离幵E程序结束2.车辆到达鱼2弟花方―(―gL快再7so/li弟4号辜停在臬车场第戈号车位上騒豔严车’E世卡如知车辆类型“代表小汽车,列弋表客车,C代表卡^5=3,2BrC鮒礬諜备蠶響车辆类型柏代暂苗车,瞅表客车,U代表卡车”5』3.车辆离开2. 显示车辆信息3. 程序结束E呈序正常结東Pfems:anyke:y七Eontinu碍(七)心得体会(1) 该实验涉及到顺序栈的建立、插入、删除等操作,涉及到了链队列的建立、插入、删除等操作。

做这个实验,加深了我对以上知识点的认识和理解2) 在这一周中,我们提高了C语言编程的能力在程序设计过程中,需要经过反复地编写,调试,运行,发现问题并解决问题,在这次实验的设计中,我加深对程序的了解,提高自己的实际动手能力和独立思考的能力同时我也学会了综合以前学到的基本知识来解决较大问题的方法3) 在这一周中,我们通过小组中的团结合作,解决了程序中一个又一个问题在这个过程中,我们更加了解彼此,更加明白合作的重要性这次集中实践,不但学会了知识,还明白了团结的重要性,可谓收获良多八)附录(源代码)#include"stdio.h"#include"stdlib.h"#defineN2/*停车场容量*/#defineM10#defineTrue1#defineFalse0typedefstruct{intnum;/*车牌号*/intarrtime;/*到达/离开时间*/charcar;/*车的类型*/}ELEMTP;/*顺序栈的数据元素类型*/typedefstruct{ELEMTPelem[N];inttop;}SqStack;/*顺序栈类型*/typedefstructnode{intnum;/*车牌号/便道上的车辆数量*/structnode*next;}QNode;/*链队列的数据元素类型*/typedefstruct{QNode*front,*rear;}LQueue;/*链队列类型*/voidInitStack_Sq(SqStack*s);/*初始化栈*/intPush_Sq(SqStack*s,ELEMTPx);/*入栈*/ELEMTPPop_Sq(SqStack*s);/*出栈*/voidInitQueue_L(LQueue*q);/*初始化队列*/voidEnQueue_L(LQueue*q,intnum1);/*入队列*/intDelQueue_L(LQueue*q);/*出队列*/voidArrive(SqStack*s1,LQueue*q,ELEMTPx){/*车辆x进入停车场*/intf;f=Push_Sq(s1,x);if(f==False){/*停车场栈s1已满入便道q*/EnQueue_L(q,x.num);printf("第%d号车停在便道第%d车位上\n",x.num,q->front->num);}elseprintf("第%d号车停在停车场第%d车位上\n",x.num,s1->top);}/*Arrive*/voidDelive(SqStack*s1,SqStack*s2,LQueue*q,ELEMTPx){/*车辆x离开停车场*/intn,f=False;在栈s1中寻找车辆ELEMTPy;QNode*p;while((s1->top>0)&&(f!=True)){/*x*/y=Pop_Sq(s1);if(y.num!=x.num)n=Push_Sq(s2,y);elsef=True;}if(y.num==x.num){/*寻找到车辆x*/if('A'==x.car)printf("第%d号车应收费%d元\n",y.num,(x.arrtime-y.arrtime)*M);elseif('B'==x.car)printf("第%d号车应收费%d元\n",y.num,(x.arrtime-y.arrtime)*M*2);elseprintf("第%d号车应收费%d元\n",y.num,(x.arrtime-y.arrtime)*M*3);while(s2->top>0){/*将栈s2中的车辆倒回到栈s1中*/y=Pop_Sq(s2);f=Push_Sq(s1,y);}n=DelQueue_L(q);if(n!=NULL){/*便道q上的第一辆车入栈s1*/y.num=n;y.arrtime=x.arrtime;f=Push_Sq(s1,y);printf("第%d号车停在停车场第%d号车位上\n",y.num,s1->top);}}else{/*栈s1中未找到车辆x*/while(s2->top>0){/*将栈s2中的车辆倒回到栈s1中*/y=Pop_Sq(s2);f=Push_Sq(s1,y);}p=q->front;/*在便道q上找到车辆x*/f=False;while(f==False&&p->next!=NULL)if(p->next->num!=x.num)p=p->next;else{p->next=p->next->next;q->front->num-。

下载提示
相似文档
正为您匹配相似的精品文档