第五章学习小结

一、本章的思维导图

二、心得体会

1、本周的个人赛,因为上周的事情比较多吧(qt杯,网安实验室作业等等),导致当天早上才开始预习课本,因为我预习的速度是比较慢的,并且图的知识点概念也确实很多,那些新的定义方法和算法都要一步一步的过一步一步的想清楚,所以上课了都没有预习完。个人赛里虽然只考了三道题,前面两道都是当天图的新的知识,并且我还没看到,所以当时看到题就慌里慌张的往后翻书,找知识点,快速看概念,用自己的话来组织,就浪费了比较多的时间吧。最后的一道是二叉树的知识,当时看到那个表第一个考虑就是顺序存储,就像实践一的那道题一样,但是第二问问的是中序遍历,但是第一个想法就是递归,可是我前面类型的定义是顺序存储啊,要如何才能数组递归呢,链式存储可以传指针,那么顺序存储就得给它传下标来递归,可是当时我就把给根结点下标写在了算法函数的第一行,所以就一直想着我每次递归但是怎么传它的下标呢,而且这个函数一进来就是给根结点下标,那不就是一直在算根结点和根结点的下一个结点吗?然后否决掉这个想法之后,就觉得以前我们用到树的递归都是用的链式存储,那这里用链式存储可以吗?但是又感觉不是很实际,毕竟那个图都画成那样了,不就是在暗示我们用顺序存储嘛。结果直到最后时间结束了都没有想清楚怎么遍历,后来因为要和梓莹聊点事情,顺带的我就问了这个问题,她是用的递归的思想,然后她提到可以在函数传参的时候可以传下标给函数的嘛,顿时就觉得对吼这个可行,但是我还没有具体实现这道题(这周要去考科一...),所以立个小小的flag这周把这个算法实现出来。

2、团体赛呢,那道题因为是基于实践一的算法,所以我们小组很快就有了思路,就用队列来辅助,最深的叶子就是最后入队的结点,因为用队列辅助实现的是层次遍历树。思路确定了后面的代码就很容易了,毕竟之前打过类似的,小bug啥的也很快就解决了,最后自信满满的提交了代码,结果第三个测试点显示段错误,看了第三个测试点的测试内容我就画了个我理解的类似的树出来,并用我们的代码进行测试,但是结果是对的。这时就觉得是不是我们的理解有问题,想来想去都没有想出个所以然,所以我去问了老师这里的意思,老师给出的解释其实和我们的想法是一样的,这下子就尴尬了,思路是对的但是第三个测试点就是不过,于是我们又详细的检查了一遍代码。因为是段错误嘛,我们又用到了数组,所以肯定是哪个数组越界访问了,可是我们用的数组空间大小是动态分配的,这就很不科学了。最后,我们发现是因为我们后面为了方便查找和输出是从下标1开始存储的,但是我们只分配了n个空间,虽然不知道其他测试点为什么可以过,但是我们改了这个地方后,整份代码就过关了。在后面剩余的一个多小时里我们也没有闲着,写注释写思路,就发现我们是new来的堆空间,然后我们好像没有释放它,所以就补上了释放的函数,但是这时就出问题了,不是最后value不等于0(函数返回异常),就是删不干净,再用指针来访问这个空间还是可以输出准确的值,但是我们改到最后还是没有改出来,就是delete不掉,(在推荐资料列一个觉得查的里面比较清楚讲了这个new和delete的blog)不过最后还是没有解决这个问题,后来又求助了梓莹她们小组,但是还是没有解决,希望老师后面会讲讲这个new和delete关于堆空间的机制吧。

三、推荐资料

https://blog.csdn.net/wise18146705004/article/details/79296753

这篇blog讲了new和delete的用法和注意事项,个人觉得还是很清晰很详细的

四、总结

我在打第五章的作业的时候,发现之前学的栈和队列的知识都有些遗忘了,这个知识点还是要去回顾一下的。然后递归的思想觉得自己理解的还是不够深刻吧,其实感觉就是有时候遇到递归就是有点懵,虽然知道大概是这个思路,但是又觉得有点迷迷糊糊的,后面补个人赛的那个代码再好好回顾学习一下吧。树的知识点是真的很多很复杂,在做思维导图最后的效果都觉得咋这么多...,并且我还是记性不咋好的,要注意多抽时间来复习,特别是我在写树的那些算法的时候还老是想不清楚,看别人团队作业的时候都是自己拿笔在纸上一步一步跟着推才明白别人的思路是怎样的,所以还是要多练习多看书上的那些算法还有pta之前做过的题的思路。后面的图的算法和知识点也很多,也要把概念记清楚,还有那些算法要认真一步一步看一步一步跟着推明白为什么会这么写,这么写的思路都要搞懂。

posted @ 2020-05-30 17:30  陈静20191002896  阅读(148)  评论(0)    收藏  举报