第二章小结
早听说数据结构要比程序设计要难,我早早就做好了心理准备,可是现实好像比我想象的还要难一些。这个星期基本结束了第二章关于线性表的学习。对于顺序表,上学期接触的比较多学起来还算比较顺利。链表就有一点困难了。书上没有完整的代码段,只是一些算法,不得不说一开始我真的有点蒙圈的感觉。但后面经过了预习以及上网查找资料就开始慢慢接受了单链表。
和顺序表不同,单链表是存储在连续或者不连续的空间里面的。每一个数据都必须跟着一个地址,指向下一个数据。虽然可能空间利用率比不上顺序表,但在插入删除操作时就显示出明显的优势了。操作简便,节省时间。插入和删除,或者是创建链表的操作,看起来都很复杂。一开始我也不是很能接受。后来反复的画图,演示之后总算是明白了。以我个人来看,实际上也就是转换地址域的值的过程。不过要相当注意的是,一定要有先后分明的顺序。不同的顺序,就可能会有不同的结果了。
在完成这周的作业时,着实碰到了不少的困难。由于书上没有完整的代码,我就有些下不去手。一开始在构建顺序表和单链表的时候我就有一些卡顿了。我不知道该用怎样的格式去写。其中一些类似于 typedef的之前也没见过,没太明白什么意思。后来也还是上网查了之后才找到了格式。我觉得对于程序来说,首先要知道怎么一个架构来写时间很重要的事情吧。
再就是在做求交集的实践题时,由于老师给了一个100000的大数据,我使用两个循环的算法毫不意外的超时了。这在之前我是重来没有遇到过的。如果想要减少运行的时间,就必须要简化算法。一开始我采取的是一个一个循环对比再存放的方法,但这样无疑是无比浪费时间的,而且后面还需要排序。
一开始没有想那么多,觉得可能是排序浪费了很多时间,所以我就修改了一下,直接用sort进行了排序。结果确实是减少了时间,然而还是运行超时了。
我想了很久还是没有想到好的解决办法,在课堂上一个同学的回答启发了我。如果是两个已经排好序的集合,那么每次对比都不需要从第一个数开始对比,只需要从上一个对比的数开始就可以了。上完课中午回到了宿舍,改了代码之后,瞬间就不超时了。甚至是快了近5倍。
后来老师又在课上教了归并合并数列的方法。对两个数列进行对比,成功了,就进行下一轮对比,不成功则进行对小的集合进行下一个数据比较。她稍微提示了我们,事实上在求交集是也是可以这么做的。
最后通过实践表明,这样确实要更快。
通过这几次的修改,这几次的进步,我深刻感受到了算法的重要性。也开始学会了去分析一个算法的时间以及空间的复杂度。写一个程序不应该仅仅只是为了解决问题,而应该是为了解决问题找到最佳的解决办法。
在这章的学习了,我参考了网站https://blog.csdn.net/qq_42623428/article/details/82987274的一些相关资料。这是一个博客。里面是关于c++编程的一些比较基础的知识点。但是在这个博客中,这些知识被分成了一些小点,可以分类的,有方向的学习。我觉得比较有用,毕竟经过了一个寒假,一些基础的知识确实有些忘记了。这里可以比较便捷的查到想要找的的知识点,也可以加深一下之前学习的知识。
目前学习暂时还可以,一般的困难都可以解决,不一般的困难在网上也差不多可以找到答案。但是还存在一些问题,我觉得我的自主学习能力不够强,学习方向怀不够明确。换而言之也就是不够自觉,没确定好目标。
接下来下一章的学习我的目标是:可以在课外更多的自我学习,自主解决问题。
原文地址:https://www.cnblogs.com/ilikezero/p/10540583.html