《数据结构》实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

苏州科技学院
数据结构(C语言版)
实验报告
专业班级测绘1011
学号10201151
姓名XX
实习地点C1 机房
指导教师史守正
目录
封面 (1)
目录 (2)
实验一线性表 (3)
一、程序设计的基本思想,原理和算法描述 (3)
二、源程序及注释(打包上传) (3)
三、运行输出结果 (4)
四、调试和运行程序过程中产生的问题及采取的措施 (6)
五、对算法的程序的讨论、分析,改进设想,其它经验教训 (6)
实验二栈和队列 (7)
一、程序设计的基本思想,原理和算法描述 (8)
二、源程序及注释(打包上传) (8)
三、运行输出结果 (8)
四、调试和运行程序过程中产生的问题及采取的措施 (10)
五、对算法的程序的讨论、分析,改进设想,其它经验教训 (10)
实验三树和二叉树 (11)
一、程序设计的基本思想,原理和算法描述 (11)
二、源程序及注释(打包上传) (12)
三、运行输出结果 (12)
四、调试和运行程序过程中产生的问题及采取的措施 (12)
五、对算法的程序的讨论、分析,改进设想,其它经验教训 (12)
实验四图 (13)
一、程序设计的基本思想,原理和算法描述 (13)
二、源程序及注释(打包上传) (14)
三、运行输出结果 (14)
四、调试和运行程序过程中产生的问题及采取的措施 (15)
五、对算法的程序的讨论、分析,改进设想,其它经验教训 (16)
实验五查找 (17)
一、程序设计的基本思想,原理和算法描述 (17)
二、源程序及注释(打包上传) (18)
三、运行输出结果 (18)
四、调试和运行程序过程中产生的问题及采取的措施 (19)
五、对算法的程序的讨论、分析,改进设想,其它经验教训 (19)
实验六排序 (20)
一、程序设计的基本思想,原理和算法描述 (20)
二、源程序及注释(打包上传) (21)
三、运行输出结果 (21)
四、调试和运行程序过程中产生的问题及采取的措施 (24)
五、对算法的程序的讨论、分析,改进设想,其它经验教训 (24)
实验一线性表
一、程序设计的基本思想,原理和算法描述:
程序的主要分为自定义函数、主函数。

自定义函数有
InitList_Sq、Out_List、ListInsert_Sq、ListDelete_Sq、LocateElem_Sq 、compare。

主函数在运行中调用上述的自定义函数,每个自定义函数实现程序的每部分的小功能。

1.程序设计基本思想
用c语言编译程序,利用顺序存储方式实现下列功能:根据键盘输入数据建立一个线性表,并输出该线性表;然后根据屏幕菜单的选择,可以进行数据的插入、删除、查找,并在插入或删除数据后,再输出线性表;最后在屏幕菜单中选择结束按钮,即可结束程序的运行。

2.原理
线性表通过顺序表现,链式表示,一元多项式表示,其中链式表示又分为静态链表,双向链表,循环链表等,在不同的情况下各不相同,他可以是一个数字,也可以是一个符号,通过符号或数字来实现程序的运行。

3.算法描述
(1)输入的形式和输入值的范围:执行插入操作时,需要输入插入的位置的元素的值;执行删除操作时,需要输入待删除元素的位置;执行查找操作时,需要输入待查找元素的值。

在所有输入中,元素的值都是整数。

(2)输出的形式:在所有操作中都要求显示相关操作是否正确以及操作后单链表的内容。

其中删除操作完成后,要显示删除元素的值;查找操作完成后,若找到待查元素,则显示该元素在单链表中的位置。

反之,给出不能找到的信息。

(3)程序功能:完成单链表的生成、插入、删除、查找操作。

(4)测试数据:
①依次输入元素12,34,56,78,90,生成一个单链表。

②插入操作中在位置4上插入元素10。

③删除操作中输入5 78,删除位于5的元素78。

④查找操作中输入56,输出元素在单链表中的位置是3。

二、源程序及注释(打包上传):
三、运行输出结果:
四、调试和运行程序过程中产生的问题及采取的措施:
开始调试过程中遇到不清楚的指针函数,为此,将其改为自己熟悉的函数,实现相应的功能。

(1)通过书本的例题以及理论知识来分析错误的原因。

(2)认真复习老师上课的ppt课件,找出老师上课的主要思想,通过老师的提醒来解决问题。

(3)与同学分析与交流。

(4)向老师请教
五、对算法的程序的讨论、分析,改进设想,其它经验教训:
我们上课必须认真听讲,课后也要仔细复习老师的ppt以及上课的笔记,这样才能更加深刻地了解老师的解题思想以及考试的重点,上机课更要独立完成老师布置的作业。

对于算法的程序,要充分发挥函数库的功能。

对于自己不清楚的函数,可以向老师询问或者去上网查找相关的方法。

实验二栈和队列
一、程序设计的基本思想,原理和算法描述:
(包括程序的结构,数据结构,输入/输出设计,符号名说明等)
程序主要由自定义函数,主函数构成。

自定义函数是实现程序每个小功能的一部分,自定义函数有:Status InitStack、Status GetTop、Status Push、Status Pop、Out_Stack。

1.程序设计基本思想
编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:
2.程序设计的原理
通过了解栈和队列的特性,来掌握栈的顺序表示和实现和栈的链式表示,实现掌握队列的顺序表示以及实现掌握队列的链式表示,最后要实现掌握栈和队列在实际问题中的应用。

3.程序设计的算法描述
(1)建立栈:构造一个空栈,并插入元素
(2)入栈,插入元素
(3)出栈,删除栈顶元素
(4)取栈顶元素
(5)输出显示栈内元素,从栈底到栈顶
4.测试数据
①依次输入元素12,34,56,78,90,123,456,789,生成一个栈。

②入栈操作中输入入栈元素100。

③出栈操作中输入5,删除从栈顶开始的5个的元素。

④取栈顶元素操作中,输出栈顶元素是78。

⑤依次输出从栈底到栈顶元素:12,34,56,78。

二、源程序及注释(打包上传):
三、运行输出结果:
四、调试和运行程序过程中产生的问题及采取的措施:
问题(1)有时会有不能够认识的语句和不能理解表达的。

(2)对题目的主要程序编写会无法下手。

措施(1)认真复习老师上课的内容与思想。

(2)与老师或者同学进行深刻的讨论。

(3)认真地分析实验的主要目的与主要方法以及主要思想。

五、对算法的程序的讨论、分析,改进设想,其它经验教训:
对于一段程序,一个人的理解还是比较局限的。

几个人一起讨论,会达到很好的改进程序的效果。

能够锻炼提高学生的实践能力,在实习课上,同学把理论课上的很多算法得以实现,上课更加积极的讨论。

大家在欢乐的气氛下,达到了理论与实践水平共同提高目的,日后同学之间谈起来,都很怀念。

实验三树和二叉树
一、程序设计的基本思想,原理和算法描述:
(包括程序的结构,数据结构,输入/输出设计,符号名说明等)
1.程序设计基本思想
通过用C语言编写程序来掌握二叉树的结构特征,以及各种存
储结构的特点和适用范围,更要能够用指针类型描述、访问和
处理二叉树的运算。

2.编写设计的原理
通过输入二叉树的先序序列字符,建立二叉链表(输入时,必
须加入结点以示空指针的位置;假设虚结点输入时用空格字符
表示)然后按先序、中序和后序遍历二叉树求二叉树结点总数,观察输出结果。

不但要求二叉树叶子数,还要求求二叉树的深
度(或称高度)。

交换二叉树的左右子树在主函数中设计一个简单的菜单,分别调试上述算法。

二叉树采用链接存储结构,其
根结点指针为T,设计一个算法对这棵二叉树的每个结点赋值
3.编写设计的步骤
(1)输入二叉树的先序序列字符,建立二叉链表。

注意:输入时,必须(2)加入虚结点以示空指针的位置;假设虚结点输入时用空格字符表示。

(3)按先序、中序和后序遍历二叉树
(4)求二叉树结点总数,观察输出结果。

(5)求二叉树叶子数,观察输出结果。

(6)求二叉树的深度(或称高度),观察输出结果。

(7)交换二叉树的左右子树
(8)在主函数中设计一个简单的菜单,分别调试上述算法。

二叉树采用链接存储结构,其根结点指针为T,设计一个算法
对这棵二叉树的每个结点赋值:(注意要修改DataType类型)
a)叶结点的值为3
b)只有左孩子或右孩子的结点则其值分别等于左孩子或右孩子
的值
c)左、右孩子均有的结点,则其值等于左、右孩子结点的值之

二、源程序及注释(打包上传):
三、运行输出结果:
四、调试和运行程序过程中产生的问题及采取的措施:
调试中在初始输入数据的时候格式非常的要注意,在实验时经常会遇到在调试的过程中会经常遇到类型不匹配等问题。

但是通过看书以及向其他同学的请教,实在不行可以向老师请教,最终都能够很好地解决问题。

五、对算法的程序的讨论、分析,改进设想,其它经验教训:
通过这次实验,我能够很好的掌握了二叉树的前序、中序、后续遍历、计算总结点数、计算叶子结点数和交换左右子数等操作。

要认真复习上课的笔记之后才可以去做题目。

通过实验的练习,也
可以将学到的知识在实验中进行实际运用,将理论与实际相结合。

算法要做到简洁,便于理解,不能够太死板。

实验四图
一、程序设计的基本思想,原理和算法描述:
1.程序设计基本思想
用c语言编译程序,是一种较线性表和树更为浮渣的数据结构。

在线性表中,数据元素之间有着明显的层次关系,并且每一层上的
数据元素可能和下一层中多个元素相关。

掌握图的基本存储方法。

掌握有关图的操作算法,并用c语言实现;熟练掌握图的两种搜索
路径的遍历方法并掌握图的有关应用。

2.程序设计的原理
建立无向网的邻接矩阵存储并输出,参考程序清单,实现无向图的
邻接矩阵表示。

建立图的邻接表存储并在此基础上实现图的深度优先遍历和广度优
先遍历
备注:无向图已完成,无向网需要自己建立(参照算法7.2);参照算法7.4,7.5,7.6完成图的深度遍历,广度遍历;请添加适当的注释。

3.算法描述
(1)认真阅读和掌握本实验的程序思想
(2)对课本的深度和广度遍历有深刻了解
(3)结合书本对程序进行填写,并结合程序进行分析
(4)按照对图的操作需要,重新改写主程序并运行,打印出文件清单和运算结果。

二、源程序及注释(打包上传):
三、运行输出结果:
四、调试和运行程序过程中产生的问题及采取的措施:
在调试的时候发现这个程序不能够返回选择菜单,但是没能进行相应的改正。

运行时运用了深度遍历和广度遍历是图的两种基本的遍历算法,但有时会把来年各种算法混乱,从而造成运行错误,不断的修改但不能得出正确答案,从而会让心情变坏,对此产生排斥,所以要及时对问题进行清理。

五、对算法的程序的讨论、分析,改进设想,其它经验教
训:
算法不能都是对着书上的照抄写下来,书上的有些也是不全面的,应该相互讨论,完善代码。

深度遍历和广度遍历是图的两种基本的遍历算法,这两个算法对图一章的重要性等同于“先序、中序、后序遍历”对于二叉树一章的重要性。

在考查时,图一章的算法设计题常常是基于这两种基本的遍历算法而设计的,比如:“求最长的最短路径问题”和“判断两顶点间是否存在长为K的简单路径问题”,就分别用到了广度遍历和深度遍历算法。

实验中遇到难题要及时去请教老师。

实验五查找
一、程序设计的基本思想,原理和算法描述:
(包括程序的结构,数据结构,输入/输出设计,符号名说明等)
1.程序设计基本思想
用c语言编译程序,掌握几种典型的查找方法(折半查找、二叉排序树的查找、哈希查找),对各种算法的特点、使用范围和效率有进一步的了解,并能用高级语言实现查找算法。

2.程序设计原理
认真阅读和掌握本实验的程序,上机运行本程序保存和打印出程序的运行结构,并结合程序进行分析按照查找操作要求,重新改写主程序并运行,打印出文件清单和运算结果。

用二叉链表做存储结构,输入键值序列,利用查找、插入算法建立一棵二叉排序树,按中序遍历这棵二叉排序树,在二叉排序树上插入结点,删除二叉排序树上的结点。

3.算法描述
(1)首先要了解本次程序的运行结果及方案
(2)对程序进行分析,修改错误的程序
(3)结合书本例题,对程序的二叉树排序进行编写
(4)按中序遍历在二叉树上的删除节点
(5)保存程序
二、源程序及注释(打包上传):
三、运行输出结果:
四、调试和运行程序过程中产生的问题及采取的措施:
在运行的过程中,对于结点的删除功能的实现一开始不能成功,之后再讨论后发现是一个指针标志错误,改正后就好了。

书本上的知识与老师的讲解都比较容易理解,但是当自己采用刚学的知识点编写程序时却感到十分棘手,有时表现在想不到适合题意的算法,有时表现在算法想出来后,只能将书本上原有的程序段誊写到自己的程序中再加以必要的连接以完成程序的编写。

针对这一情况,我会严格要求自己,熟练掌握算法思想,尽量独立完成程序的编写与修改工作,只有这样,才能够提高运用知识,解决问题的能力。

五、对算法的程序的讨论、分析,改进设想,其它经验教
训:
代码在调试和运行中改进,对于一个功能,应该选择简洁的代码,不能追求代码的长度。

在不少数据结构的教材中,是把查找与排序放入高级数据结构中的。

应该说,查找和排序两章是前面我们所学的知识的综合运用,用到了树、也用到了链表等知识,对这些数据结构某一方面的运用就构成了查找和排序。

现实生活中,search几乎无处不在,特别是现在的网络时代,万事离不开
search,小到文档内文字的搜索,大到INTERNET上的搜索,search占据了我
们上网的大部分时间。

实验六排序
一、程序设计的基本思想,原理和算法描述:
(包括程序的结构,数据结构,输入/输出设计,符号名说明等)
1.程序设计基本思想
用c语言编译程序,每次将一个待排序的记录,按其关键字的大小插入到前面已经排好序的子表中的适当位置,知道全部记录插入完成为止。

2.程序设计原理
它是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的任意序列,重新排列成按关键字排列的序列,认真阅读和掌握本实验的程序,上机运行本程序,保存和打印出程序的运行结构,并结合程序进行分析,按照排序操作要求,编写主程序并运行,打印出运行结果。

3.算法描述
(1)编写主函数
(2)分别实现直接插入
(3)冒泡排序(算法在P16)
(4)快速排序
(5)简单选择排序
(6)堆排序等排序算法
二、源程序及注释(打包上传):
三、运行输出结果:
四、调试和运行程序过程中产生的问题及采取的措施:
调试的过程中,对于错误不断的改进和相互交流,从而改进程序和实现功能。

运行时可能会对程序的方法有些模糊,这样就可能无从下手,比如冒泡等方法会混淆,所以要经常翻书了解数据结构的思想,从而对排序能够全面掌握。

五、对算法的程序的讨论、分析,改进设想,其它经验教
训:
代码的调试要注意值的运算,迭代过程。

这个程序的主要思想是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。

稳定排序:如果在排序文件中存在多个关键词相同的记录,经过排序后这些只有相同关键字的记录之间的相对次序保持不变的排序方法。

不稳定排序:具有相同关键字的记录之间在排序结束后,其相对次序发生变化的排序方法。

内部排序:排序过程中,整个文件都是放在内存中处理,排序时不涉及数据的内、外存交换。

外部排序:排序过程中,若整个文件排序过程中要进行数据的内、外存交换。

通过此次实验可以是排序与VB,VC相结合。

相关文档
最新文档