20172328《程序设计与数据结构》实验一:线性结构实验报告
- 课程:《软件结构与数据结构》
- 班级: 1723
- 姓名: 李馨雨
- 学号:20172328
- 实验教师:王志强老师
- 实验日期:2018年9月28日-2018年10月2日
- 必修选修: 必修
一、实验要求内容
实验主要涉及:线性结构之链表及数组
- 实验1:基础链表建立
-
①通过键盘输入一些整数,建立一个链表;这些数是你学号中依次取出的两位数,再加上今天的时间。 例如你的学号是 2017230今天此刻时间是 16:23:49秒,那么数字就是20,17,23,30,1,16,23,49。
-
②然后打印所有链表元素,并输出元素的总数。
-
③在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。 例如你叫 张三, 那么这个变量名就是
int nZhangSan = 0; //初始化为0.
-
④做完这一步,把你的程序签入源代码控制(git push)
-
- 实验2:实现节点插入、删除、输出操作
- ①从磁盘读取一个文件。
- ②这个文件有两个数字。从文件中读入数字1,插入到链表第5位,并打印所有数字,和元素的总数。保留这个链表,继续下面的操作。
- ③从文件中读入数字2, 插入到链表第 0 位,并打印所有数字,和元素的总数。 保留这个链表,并继续下面的操作。
- ④从链表中删除刚才的数字1. 并打印所有数字和元素的总数。
- 实验3:实现链表的选择排序
- ①使用选择排序法根据数值大小对链表进行排序;
- 在排序的每一个轮次中,打印元素的总数,和目前链表的所有元素。
- 实验4:实现数组插入、删除、输出操作
- ①从磁盘读取一个文件。
- ②这个文件有两个数字。从文件中读入数字1,插入到数组第5位,并打印所有数字,和元素的总数。 保留这个数组,继续下面的操作。
- ③从文件中读入数字2, 插入到数组第 0 位,并打印所有数字,和元素的总数。 保留这个数组,并继续下面的操作。
- ④**从数组中删除刚才的数字1. ** 并打印所有数字和元素的总数
- 实验5:实现数组的选择排序
- ①使用选择排序法根据数值大小对数组进行排序
- ②在排序的每一个轮次中,打印元素的总数,和目前数组的所有元素。
二、实验过程及结果
-
实验一
-
实验二
-
实验三
-
实验四
-
实验五
三、实验过程中遇到的问题和解决过程
-
问题一:实验4在实现打印Print方法时,正常输入的数字后面出现的很多个0的问题。
-
问题一解决:刚开始写这个方法的时候,for循环里面是遍历了整个数组,而我在最前面定义数组长度的时候定义了100个空间,虽然我放入了固定长度的有效的一些数组,但数组后面空着的位置默认放入了元素0;故在打印时会出现这样的问题,所以解决办法是控制遍历的循环次数,将我们输入以及操作的有效存进数组中的数字打印出来就好,用nlixinyu来代表当前数组中的有效数字总数,最后用nlixinyu作为for循环中的控制条件就完美解决了这个问题。之前还想过用for-each来打印数组,但是问题是一样的,我们只选用数组的一部分即可,若是用for-each仍然会出现后面大量0的问题。
-
问题二:在做实验4时,数组的插入和删除方法一直不能实现,通过所学知识觉得自己完全理解其实质含义,但苦于一直无法完美实现需求结果,刚开始出现很多的0,后面又无法出现丢失索引处元素的情况,删除在索引为1的位置不能实现的情况。
-
问题二解决:从网上查阅资料后,发现要在某一具体位置插入某个元素的值,需要从最后的数组元素开始,一个一个的向后移位,这样才能保证原索引值元素不丢失。经过改正和代码调试,最终达到了目的。再来看删除方法,删除方法当时不能删除索引为0的数,而我们的实验要求恰好是要删除索引值为1的元素,所以就在短短的三行代码里,到底哪里出了问题,最终经过Debug调试,发现要求数组的索引最大应该是元素总数-1才对,所以当我的循环次数直接小于元素总数时,最后扫到往前挪的数值还是0,,所以我最后是无法删除成功的。更改之后就可以进行删除操作了。
其他(感悟、思考等)
本次实验做的时间有点久,其实链表和数组的很多内容都是上学期接触过甚至实现过的,但因为自己掌握的不牢靠,像从文件中读入数据这个点就卡了自己很久,像给数组中插入删除元素也就卡了自己很久。
知识的融汇贯通性实为重要,这使我想到《论语·述而篇》中的“不愤不启,不悱不发,举一隅不以三隅反,则不复也”,善于学习的能力是从古至今都公认的不可缺乏者。
“愤”“悱”加之,故亦心向往之,心向往之,故愈觅求知。