第三章学习小结

一、本章内容主要学习栈与队列这两种新的数据结构的定义与操作,我觉得可以说就是线性表的延伸吧,以下是本章的思维导图

二、心得体会
(1)我觉得就是线性表对插入删除操作的位置进行更细分的两种定义吧,具体的操作还是差不多的,上一章的内容学好了的话这一章就会轻松很多,所以这章作业自己认为还是做的快了一点滴,但是链表的操作的实现还是不能完全脱离课本,有时候在打的时候还是会出错要看一下书本。而且刚刚接触了c++的STL库,第四章之后就可以使用啦,有空的时候要熟悉一下里面的操作以后打代码会简洁方便很多。这周还讨论了一下汉诺塔问题和走楼梯的问题,我是回答的汉诺塔问题,当时我就只想到了按照老师视频上的讲解来实现一下给一下代码就可以了,但是后来看到别的同学把这个问题根源的数学模型都归纳出来了,觉得自己对问题的思考不够,不过下次老师要是直接给我们个64之类的大数我相信大家都会更进一步思考滴。其实刚考试我按照老师的讲解的思路复现的时候,还是觉得这样就是汉诺塔函数了?感觉就是直接把我们的想法直接敲上去了的感觉,我还以为不能跑的出来,老师只是给了我们一个思路具体的还是要自己完成。但是神奇的是汉诺塔函数就是如此的简洁,然后我就有点不太明白它是如何递归的了,怎样准确的定位到哪个盘子放在哪个柱子上。因为dev的调试模式我不太会用,所以我就用java重新打了一遍,用NetBeans调试了一下,不过其实还是没有太搞清楚它是怎么跑的感觉有点乱,老师之前说过递归调用就是只用搞清楚本层逻辑要搞清楚怎么递归的很容易晕的,所以这个问题先暂时搁置吧,等我哪天清醒一点再思考吧(晕乎乎.jpg)。后面我在评论别的同学分析的走楼梯问题时,看到同学们一般都是有两种做法那就是后面说的自顶向下和自底向上的解决方法,这时我就想如果递归比较多比较复杂难懂的情况下从自底向上的思路来想应该会容易理解一点,所以空闲时间要再把汉诺塔好好想想。

(2)这周又进行了一次小组的合作,因为老师题目中这次有提示我们优化查找函数否则会超时的问题,我们一开始都有点迷茫怎么优化呢有什么办法呢,觉得要是想不出优化的就凭简单的实现一遍是觉得会超时的。但是想了半个小时我们还是没有想出具体的解决方案,所以先决定用我们知道的最基本的方法实现一遍,然后竟然过了所有测试点虽然运行时间擦边过。后面的一个多小时我们都在想如何优化这个链表查询的函数(我们组采用的是链式存储),最后我提出了一个想法但是好像运行起来在输某些数据的时候会有点问题,最后也还是没有解决。结束之后也有要到别的组运行速度比较快的代码,我看了一下他们是采用的顺序存储的结构,但是实现的思路查询的次数其实和我们是一样的,这时我们小组就产生了一些分歧,依泓认为在查询时结构体中虽然放了有地址,但是指针跳转还是要查询地址的,而顺序存储因为地址是挨着的所以在查询地址这方面用指针时间开销会大,但是我认为不应该产生这样的结果,既然实现思路这些是一样的那么时间开销应该也是相似的,除了后台的随机数据刚刚好抽中的数据比较好这个原因我想不到别的,指针跳转地址我并不认为会比数组跳转地址时间开销会大。但是我后来实在想不明白于是乎我找了一些资料关于指针调用和数组调用的资料,等会会贴在下面分享中,事实证明在汇编来看指针调用地址甚至还比数组调用地址要快,所以我就更加疑惑了,希望老师对这次合作作业的评讲可以解除我的疑惑吧。

三、资料分享

https://blog.csdn.net/pony_maggie/article/details/6748662

这是一篇从汇编出发来解释为什么指针访问的效率会比数组访问的效率高的blog。

四、上阶段总结+下阶段目标

链表的应用基本已经掌握,只是有时还需翻翻书,做代码作业也比以前要快很多,出bug的时候也知道怎么改了,总的来说上阶段的目标还算基本达成,下阶段的目标是下一章的串和广义表是完全没有接触过的,所以希望也能好好掌握,要和之前学过的进行联系或知道他们的区别在哪,在应用上对哪种问题用哪种数据结构来解决要更加敏感。

posted @ 2020-04-25 09:19  陈静20191002896  阅读(150)  评论(0编辑  收藏  举报