数据结构实习报告文档格式.docx
《数据结构实习报告文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构实习报告文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
一、程序设计的基本思想,原理和算法描述:
1.定义数据结构,Sqlist顺序结构,并定义该类型的指针变量*L
2.初始化顺序表,并输入5个整数,通过选择菜单来打印输出
3线性结构的基本特征为:
1.集合中必存在唯一的一个“第一元素”;
2.集合中必存在唯一的一个“最后元素”;
3.除最后一个元素之外,均有唯一的后继(后件);
4.除第一个元素之外,均有唯一的前驱(前件)。
由n(n≥0)个数据元素(结点)a1,a2,…,an组成的有限序列。
数据元素的个数n定义为表的长度。
二、源程序及注释(打包上传):
三、运行输出结果:
1、原始数据
2、插入元素
3、删除元素
4、查找元素
四、调试和运行程序过程中产生的问题及采取的措施:
实验一开始的程序编写出了一些问题,后来经过看书问同学再调试修改后就没有问题了,总体来说比较简单。
五、对算法的程序的讨论、分析,改进设想,其它经验教训:
算法还缺少健全性的考虑,只考虑到输入值合法的情况,不合法的还没考虑。
这个很不周到。
还有不能完全根据老书上的代码来编写,还是要根据实际情况来编写代码的。
实验二栈和队列
1、基本原理:
栈
Insert(L,n+1,x)
Delete(L,n)
而栈只允许在表尾一端进行插入和删除
队列
Delete(L,1)
队列只允许在表尾一端进行插入,在表头一端进行删除
2、程序结构:
程序主要结构包括以下几个部分:
定义结构体,建立新的线性链表,插入数据,查找数据,删除数据和输出数据。
3、数据结构:
首先建立带表头结点的单链线性表,初始长度为100,每次递增10.每次要存储一个数据时就建立一个新的结点,然后把前一结点的指针指向下一结点的地址。
1、程序界面和建立栈
2、入栈
3、出栈
4、取出栈顶元素
5、输出显示栈内元素
算法结构问题:
在传值和传址上存在很多问题,后来在老师帮助下解决了这个问题。
一定要主要传值的对象不小心就搞错了。
总的来说,数据的算法理解起来是比较容易的,但通过算法表达并不容易。
对我来说顺序表的链式结构更容易让我接受,因为它能够随即存储,不需要进行事先给与一定的空间。
实验三树和二叉树
数据的结构是采用的二叉树链表结构,输入的是二叉树的顺序结构,输出的是二叉树先序,中序,后序的树结构,以及输出树的结点数,树的叶子结点数。
二叉树是由3个基本单元组成:
根结点、左子树和右子树。
程序包含了二叉树的建立,前序、中序和后序遍历的操作,求所有总结点及叶子节点总数的操作;
交换左右子树、计算树的深度和节点赋值等。
1、程序界面、建立二叉树、前序
2、中序
3、后序
4总结点数
5、总叶子数
6、交换左右子树
7、计算树的深度
8、结点赋值
调试的时候出错最多是参数之间的值址传递。
因为对二叉树的结构还没彻底熟悉,再加上左右子树容易混淆,所以编写的时候有许多次出现了这样的错误。
1、算法中大量用到递归的形式,要多做练习来巩固和提高对递归的认识。
2、熟练掌握二叉树的结构特性,了解相应的证明方法。
熟悉二叉树的各种存储结构的特点及适用范围。
不然在自己做的时候感觉有点模糊不清。
实验四图
在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。
中序遍历二叉树的方法是:
遍历左子树->
访问跟结点->
遍历右子树。
在二叉排序树上查找其关键字等于给定值的结点过程,恰是走过了一条根结点到该结点的路径的过程,和给定值比较的关键字个数等于路径长度加1,因此,与折半查找类似,与给定值比较的关键字个数不超过树的深度。
1、程序界面
2、有向图DG
3、无向图UDG
这个实验我觉得比较难。
因为有些地方代码编写的有错误,所以有向网和无向网在运行的时候出现了一些问题,在同学的帮助下完成了任务。
编写程序时一定不能急,越急越会出现错误,而且自己还不一定知道错在哪了。
当一个人不会做的时候,跟同学相互交流一下自己的体会,或许就会豁然开朗的。
而且不能只看书上的代码来做,书上有它的适用范围。
实验五查找
基本思想:
查找是根据给定的某个值,在查找表中确定一个其关键字等于给定值的记录或数据元素。
拆半查找的查找过程是:
先确定待查记录所在的范围,然后逐步缩小范围直到找到或找不到该记录为止。
拆半查找过程是一处于区间中间位置记录的关键字和给定值比较,若相等,则查找成功,若不等,则缩小范围,直至新的区间中间位置记录的关键字等于给定值或者查找区间的大小小于零时为止。
二叉排序树或者是一棵空树;
或者是具有下列性质的二叉树:
(1)若它的左子树不空,则左子树上所以结点的值均小于它的根结点的值,
(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值(3)它的左右子树也分别为二叉排序树。
1、程序界面和建立二叉排序树
4、调试和运行程序过程中产生的问题及采取的措施:
一定要区分这几种算法,不能搞混淆。
在编写程序时也有些问题,最后在同学的帮助下完成了编程。
感觉现在越来越难了。
感觉现在的编程好难,唉,多问同学多问老师,还有上课认真听讲吧。
不然听不懂了,还有书上把不需要的知识删了吧!
实验六排序
排序时计算机程序设计中的一种重要操作,它的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列。
直接插入排序是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。
希尔排序又称“缩小增量排序”,它也是一种属插入排序类的方法,但在时间效率上较前述几种排序方法有较大的改进。
快速排序的基本思想是,通过一趟排序将待排记录分割成独立的两个部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,达到整个序列有序。
选择排序的基本思想是每一趟在n-i+1(i=1,2,……,n-1)个记录中选取关键字最小的记录作为有序序列中第i个序列中第i个记录。
堆排序是只需要一个记录大小的辅助空间,每个待排序的记录仅占有一个存储空间。
1、程序界面和建立线性表
2、插入排序
3、冒泡排序
4、快速排序
5、选择排序
6、堆排序
插入排序、冒泡排序、快速排序、选择排序、堆排序其中有许多相同的地方,但也有许多不同的地方,所以在编写代码时容易混淆。
而在编写的时候经常把这几种排序给弄反了导致最终的结果不正确,后来发现了问题又一步步的给重新调了过来。
由于待排序的记录数量不同,使得排序过程中涉及的存储器不同,可将排序方法分为两大类:
一类是内部排序,指的是待排序记录存放在计算机随机存储器中进行的排序过程,另一类是外部排序,指的是待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程。
内部排序根据不同的原则对内部排序进行分类,可大致分为插入排序。
交换排序、选择排序、归并排序和计数排序等五类。