付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构实验一、实验目的数据结构是计算机专业一门重要的专业技术基础课程,是计算机专业的一门核心的关键性课程。本课程较系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了常用的多种查找和排序技术,并做了性能分析和比较,内容非常丰富。本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。由于以下原因,使得掌握这门课程具有较大的难度:(1)内容丰富,学习量大,给学习带来困难;(2)所用到的技术多,而在此之前的各门课程中所介绍的专业性知识又不多,因而加大了学习难度;(3)隐含在各部分的技术和方法丰富,也是学习的重点和难点。根据数据结构课程本身的技术特性,设置数据结构课
2、程实验实践环节十分重要。通过实验实践内容的训练,突出构造性思维训练的特征,目的是提高学生组织数据及编写大型程序的能力。课程上机实验的目的,不仅仅是验证教材和讲课的内容,检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:1、加深对课堂讲授内容的理解实验是对学生的一种全面综合训练。是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,实验题中的问题比平时的习题复杂得多,也更接近实际。实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变"活",起到深化理解和灵活掌
3、握教学内容的目的。不少学生在解答习题尤其是算法设计题时,觉得无从下手,做起来特别费劲。实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。2、培养学生软件设计的综合能力平时的练习较偏重于如何编写功能单一的"小"算法,而实验题是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。此外,还有很重要的一点是:机器是比任何教师都严厉的检查者。通过实验使学生不仅能够深化理解教学内容,进一
4、步提高灵活运用数据结构、算法和程序设计技术的能力,而且可以在需求分析、总体结构设计、算法设计、程序设计、上机操作及程序调试等基本技能方面受到综合训练。实验着眼于原理与应用的结合点,使学生学会如何把书本上和课堂上学到的知识用于解决实际问题,从而培养计算机软件工作所需要的动手能力。3、熟悉程序开发环境,学习上机调试程序一个程序从编辑,编译,连接到运行,都要在一定的外部操作环境下才能进行。所谓"环境"就是所用的计算机系统硬件,软件条件,只有学会使用这些环境,才能进行程序开发工作。通过上机实验,熟练地掌握程序的开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到
5、其它开发环境时就会触类旁通,很快掌握新系统的使用。完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆语法错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,尽快掌握程序调试方法是非常重要的。分析问题,选择算法,编好程序,只能说完成一半工作,另一半工作就是调试程序,运行程序并得到正确结果。、实验要求常用的软件开发方法,是将软件开发过程划分为分析、设计、实现和维护四个阶段。虽然数据结构课程中的
6、实验题目的远不如从实际问题中的复杂程度度高,但为了培养一个软件工作者所应具备的科学工作的方法和作风,也应遵循以下五个步骤来完成实验题目:1 .问题分析和任务定义在进行设计之前,首先应该充分地分析和理解问题,明确问题要求做什么?限制条件是什么。本步骤强调的是做什么?而不是怎么做。对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。例如:输入数据的类型、值的范围以及输入的形式;输出数据的类型、值的范围及输出的形式;若是会话式的输入,则结束标志是什么?是否接受非法的输入?对非法输入的回答方式是什么等。还应该为调试程序准备好测试数据,包括合法的输入数据和非法形式的输入数据。2
7、 .逻辑设计和详细设计在设计这一步骤中需分逻辑设计和详细设计两步实现。逻辑设计指的是,对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型;详细设计则为定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。作为逻辑设计的结果,应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调用关系图。详细设计的结果是对数据结构和基本操作作出进一步的求精,
8、写出数据存储结构的类型定义,写出函数形式的算法框架。在求精的过程中,应尽量避免陷入语言细节,不必过早表述辅助数据结构和局部变量。3 .编码实现和静态检查编码是把详细设计的结果进一步求精为程序设计语言程序。如果基于详细设计的伪码算法就能直接在键盘上输入程序的话,则可以不必用笔在纸上写出编码,而将这一步的工作放在上机准备之后进行,即在上机调试之前直接用键盘输入。然而,不管你是否写出编码的程序,在上机之前,认真的静态检查是必不可少的。静态检查主要有两种方法,一是用一组测试数据手工执行程序(通常应先分模块检查);二是通过对程序深入全面地理解程序逻辑,在这个过程中再加入一些注解和断言。如果程序中逻辑概念
9、清楚,后者将比前者有效。4 .上机准备和上机调试上机准备包括以下几个方面:(1)注意同一高级语言文本之间的差别。(2)熟悉机器的操作系统和语言集成环境的用户手册,尤其是最常用的命令操作,以便顺利进行上机的基本活动。(3)掌握调试工具,考虑调试方案,设计测试数据并手工得出正确结果。应该能够熟练运用高级语言的程序调试器DBBU朋试程序。(4)上机调试程序时要带一本高级语言教材或手册。调试最好分模块进行,自底向上,即先调试低层函数。在调试过程中可以不断借助DEBUG:各种功能,提高调试效率。调试中遇到的各种异常现象往往是预料不到的,此时应动手确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整
10、理源程序及其注释,形成格式和风格良好的源程序清单和结果。5 .总结和整理实验报告实验结束后,要整理实验结果并认真分析和总结,根据教师要求写出实验报告。实验报告一般包括如下内容:1实验内容2实验目的3程序清单4调试步骤5运行结果原始数据,相应的运行结果和必要的说明。6分析与思考调试过程及调试中遇到的问题及解决办法;调试程序的心得与体会;其他算法的存在与实践等。若最终未完成调试,要认真找出错误并分析原因等。实验一、约瑟夫环【实验学时】5学时【实验目的】掌握链表的基本操作:插入、删除、查找等运算,能够灵活应用链表这种数据结构。【问题描述】约瑟夫(Joseph)问题的一种描述是:编号为1,2,,n的n
11、个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。【基本要求】利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。【测试数据】m的初值为20;n=7,7个人的密码依次为:3,1,7,2,4,8,4,首先m值为6(正确的出列顺序应为6,1,4,7,2,3,5)。【实现提示】程序运行后,首先要求用户指定初始报数上限值,然后读取各人的密码。可
12、设n030。此题所用的循环链表中不需要“头结点”,请注意空表和非空表的界限。【选作内容】向上述程序中添加在顺序结构上实现的部分实习二、停车场管理【实验学时】5学时【实验目的】(1)深入了解栈和队列的特性,掌握栈和队列的存储方法。(2)掌握栈和队列的基本操作,如初始化、入栈(队列)、出栈(队列)等,并能在实际问题背景下灵活运用。【问题描述】设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已经停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则
13、排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出场为它让路,待该辆车开出大门外,其他车辆再按次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用,试为停车场编制按上述要求进行管理的模拟程序。【基本要求】以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停
14、留的时间不收费)。栈以顺序结构实现。队列以链表结构实现。【测试数据】设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)。【实现提示】需另
15、设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序o栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。【选作内容】(1)两个栈共享空间,思考应开辟数组的空间是多少?(2)汽车可以有不同种类,则他们的占地面积不同,收费标准也不同,如1辆客车和1。5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。(3)汽车可以直接从便道上开走,再依次排到队尾。(4)停放在便道上的汽车业收费,何修改结构以满足这种要求。代码:#include<stdio.h>#include<mallo
16、c.h>#include<stdlib.h># defineMAX2/停车场容量# defineprice5/单价# defineOK1# defineFALSE0# defineTRUE1# defineERROR-1# defineOVERFLOW-2typedefintStatus;typedefstructCarNodecharevent;intnum;inttime;CarNode;/信息结点typedefstructSqStackCarNode*base;CarNode*top;intStacksize;SqStack;/停车场栈typedefstructQNod
17、eCarNodedata;structQNode*next;QueueNode;/便道结点typedefstructLinkQueueQueueNode*front;QueueNode*rear;intqueuesize;LinkQueue;/便道队列此时排在它前面的汽车要先开走让路,然后收费标准比停放在停车场的车低,请思考如构造空栈StatusInitStack(SqStack&S)/S.Stacksize=0;S.base=(CarNode*)malloc(MAX)*sizeof(CarNode);if(!S.base)exit(OVERFLOW);printf("分配存
18、储空间失败");S.top=S.base;returnOK;StatusInitQueue(LinkQueue&Q)/构造空队列Q.rear=Q.front=(QueueNode*)malloc(sizeof(QueueNode);if(!Q.front)exit(OVERFLOW);printf("分配存储空间失败");Q.front->next=NULL;Q.queuesize=0;returnOK;StatusGetTop(SqStackS,CarNode&e)if(S.top=S.base)returnERROR;e=*(S.top-
19、1);returnTRUE;StatusPop(SqStack&S,CarNode&e)if(S.top=S.base)returnERROR;e=*-S.top;returnOK;StatusPush(SqStack&S,CarNodee)if(S.top-S.base>=MAX)returnFALSE;*S.top+=e;returnOK;StatusDeQueue(LinkQueue&Q,CarNode&e)/删除带头结点之后的队头元素if(Q.rear=Q.front)returnERROR;QueueNode*p=Q.front->
20、next;e=p->data;Q.front->next=p->next;if(p=Q.rear)Q.rear=Q.front;free(p);Q.queuesize-;returnOK;StatusEnQueue(LinkQueue&Q,CarNode&e)QueueNode*p=(QueueNode*)malloc(sizeof(QueueNode);if(!p)exit(OVERFLOW);p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;Q.queuesize+;returnOK;)Stat
21、usCheck_Stack(SqStack&S,CarNodee)/车辆到达时车库内是否有同名车CarNode*Temp=S.base;while(Temp!=(S.top)&&(Temp->num!=e.num)Temp+;if(Temp=S.top)returnFALSE;elsereturnTRUE;)StatusCheck_Queue(LinkQueue&Q,CarNodee)/车辆到达时便道上是否有同名车QueueNode*Temp=Q.front;while(Temp!=Q.rear)&&(Temp->data.num!=
22、e.num)Temp=Temp->next;if(Temp=Q.rear)&&(Temp->data.num!=e.num)returnFALSE;elsereturnTRUE;)StatusArrive(SqStack&S,LinkQueue&Q,CarNode&e)if(S.top-1)->time<=e.time)/判断后来车辆进入的时间是否比之前进入时间大if(!Check_Stack(S,e)&&!Check_Queue(Q,e)if(S.top-S.base<MAX)/判断停车场是否已满Push(
23、S,e);printf("成功进入停车场,在cHt车位n",S.top-S.base);returnOK;)elseEnQueue(Q,e);printf("停车场车位已满,车辆进入便道,在d号车位n",Q.queuesize);returnOK;)elseprintf("该牌照的车已存在,输入有误,请重新输入n");)elseprintf("时间输入有误,请重新输入n");returnFALSE;)StatusLeave(SqStack&S,SqStack&TempS,LinkQueue&
24、Q,CarNode&e)CarNodea;intltime;intlnum;intetime;intcost;if(!(Check_Stack(S,e)|Check_Queue(Q,e)判断停车场或者便道内是否有该车printf("数据输入错误,停车场内无所查询车辆,请重新输入!n");return0;)elseif(Check_Stack(S,e)if(e.num=(S.top-1)->num)/如果车辆在栈顶,出栈并且输出车辆信息Pop(S,a);ltime=e.time;etime=a.time;printf("车辆进入时间d离开时间%dn&q
25、uot;,etime,ltime);)else/否则让其后排的车先退入便道(do(Pop(S,a);Push(TempS,a);)while(S.top-1)->num!=e.num);Pop(S,a);ltime=e.time;lnum=e.num;etime=a.time;printf("车辆进入时间d离开时间%dn",etime,ltime);doPop(TempS,a);Push(S,a);while(TempS.top!=TempS.base);)cost=(ltime-etime)*price;if(cost>=0)lnum=e.num;printf("您的车牌号为d的车应缴纳的费用为:%dn",lnum,cost);if(Q.front!=Q.rear)DeQueue(Q,a);if(a.time<ltime)etime=ltime;a.time=ltime;Push(S,a);printf("车牌号为%d的车辆从便道上开始进入d号车库,现在时间为%dn",a.num,S.top-S.base,a.time);returnTRUE;)voidEvent(LinkQueue&R)(CarNodecar;SqStackPark,TempPark;LinkQueueQ;InitSt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 金华市金东区东湖水利枢纽工程设计招标文件
- 自贡市2026年高考语文倒计时模拟卷含解析
- 26年基础护理技能市场化运营课件
- 【2026年】整形外科学(中级324)基础知识卫生专业技术资格考试应考难点(解析版)
- 【2026年】教师资格考试初中数学面试知识点精练试题解析
- 26年基础护理技能口诀课件
- 第六章 教育个案研究
- 主题教育始终如一-1
- 教育主题小报设计-1
- 电影表演创作职业方向
- 2026年测自己性格测试题及答案
- 2026中国文创产品市场消费趋势与商业模式创新研究报告
- 带状疱疹临床路径完整版
- 北京2025年国家艺术基金管理中心招聘应届毕业生笔试历年参考题库附带答案详解(5卷)
- 《安全预评价提供基础资料清单》
- 铜砭刮痧的基础及临床应用
- 2025年广西初中学业水平考试中考(会考)地理试卷(真题+答案)
- 光伏工程 危害辨识风险评价表(光伏)
- 2024年同等学力申硕《生物学学科综合水平考试》题库【历年真题+章节题库+模拟试题】
- 离婚协议书下载电子版完整离婚协议书下载
- 《高数双语》课件section 6.1
评论
0/150
提交评论