20172328《程序设计与数据结构》实验一:线性结构实验报告

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:实现数组的选择排序
    • ①使用选择排序法根据数值大小对数组进行排序
    • ②在排序的每一个轮次中,打印元素的总数,和目前数组的所有元素。

二、实验过程及结果

  • 实验一
    1332971-20181002113556849-1496503714.png
  • 实验二
    1332971-20181002113647058-1268736152.png
  • 实验三
    1332971-20181002113705477-1140704291.png
  • 实验四
    1332971-20181002113814473-377082624.png
    1332971-20181002113822460-903640895.png
    1332971-20181002113833265-606974132.png

  • 实验五
    1332971-20181002113754917-1498346068.png

三、实验过程中遇到的问题和解决过程

  • 问题一:实验4在实现打印Print方法时,正常输入的数字后面出现的很多个0的问题。
    1332971-20181002114516416-1448436436.png

  • 问题一解决:刚开始写这个方法的时候,for循环里面是遍历了整个数组,而我在最前面定义数组长度的时候定义了100个空间,虽然我放入了固定长度的有效的一些数组,但数组后面空着的位置默认放入了元素0;故在打印时会出现这样的问题,所以解决办法是控制遍历的循环次数,将我们输入以及操作的有效存进数组中的数字打印出来就好,用nlixinyu来代表当前数组中的有效数字总数,最后用nlixinyu作为for循环中的控制条件就完美解决了这个问题。之前还想过用for-each来打印数组,但是问题是一样的,我们只选用数组的一部分即可,若是用for-each仍然会出现后面大量0的问题。

  • 问题二:在做实验4时,数组的插入和删除方法一直不能实现,通过所学知识觉得自己完全理解其实质含义,但苦于一直无法完美实现需求结果,刚开始出现很多的0,后面又无法出现丢失索引处元素的情况,删除在索引为1的位置不能实现的情况。
    1332971-20181002114610351-1452348404.png
    1332971-20181002114620451-1343111884.png

  • 问题二解决:从网上查阅资料后,发现要在某一具体位置插入某个元素的值,需要从最后的数组元素开始,一个一个的向后移位,这样才能保证原索引值元素不丢失。经过改正和代码调试,最终达到了目的。再来看删除方法,删除方法当时不能删除索引为0的数,而我们的实验要求恰好是要删除索引值为1的元素,所以就在短短的三行代码里,到底哪里出了问题,最终经过Debug调试,发现要求数组的索引最大应该是元素总数-1才对,所以当我的循环次数直接小于元素总数时,最后扫到往前挪的数值还是0,,所以我最后是无法删除成功的。更改之后就可以进行删除操作了。
    1332971-20181002114702284-459849653.png
    1332971-20181002114721616-561403791.png
    1332971-20181002114737362-889938969.png
    1332971-20181002114808821-614225098.png

其他(感悟、思考等)

本次实验做的时间有点久,其实链表和数组的很多内容都是上学期接触过甚至实现过的,但因为自己掌握的不牢靠,像从文件中读入数据这个点就卡了自己很久,像给数组中插入删除元素也就卡了自己很久。

知识的融汇贯通性实为重要,这使我想到《论语·述而篇》中的“不愤不启,不悱不发,举一隅不以三隅反,则不复也”,善于学习的能力是从古至今都公认的不可缺乏者。

“愤”“悱”加之,故亦心向往之,心向往之,故愈觅求知。

四、参考资料

转载于:https://www.cnblogs.com/LXY462283007/p/9736684.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值