数据结构+算法+c++学习(写在前面)

版权声明:转载请注明出处: https://blog.csdn.net/weixin_42398658/article/details/87940074

本篇开始将开始更新算法方面的博客,其实应该是数据结构更多一些,我不知道大家是如何学习算法和数据结构的,就我目前的学习情况,简单的和大家说一下感受。本人研一时学校开设了算法这门课程,当时上这门课时也很用心的学习了,但是那时候的学习更多的是理解各个算法的原理,不懂数据结构方面的知识,更不会自己写算法,有时候遇到问题能想到可以使用某一个算法进行解决,但是就是自己写不出来,原因是没学数据结构,为什么这样说呢?

        我觉得算法和数据结构的学习不应该分开学,应该在一起学习,但是放在一起学习,知识量太大了,所以拆了学习,拆开学习建议先学习算法,不需要你动手写程序,简单的使用伪代码就可以了,关键是要深入理解算法思想,以及不同算法的区别这才是核心。如果有算法的基础,在学习数据结构你会发现很简单(当然需要勤加练习)。之前为何写不出来代码呢?一是没有很好的编程基础(没有实战过),二是没有数据结构的知识。数据结构太重要,这门课就是教你如何写出高质量的代码的,建议大家一定要好好学习一下数据结构,下面我就简单的介绍一下我学习数据结构的过程,希望能给你解惑,如果你是急于求成或者急于找工作,建议直接刷LeetCode吧,那样效果会更好,我说的方法都是基本功,是通过学习数据结构解决任何一个问题(当然不是NP难问题),解决LeetCode的就更不在话下了,这就是以不变应万变的深层含义,我是这样学习的。

     本人打算学习数据结构和算法实现使用语言是c++,当时对c++也不算很懂,以前只深入学习过c语言,基础好点,因此直接看了一本书《C++语言程序设计(第4版)》.(郑莉,董渊),这本书写的挺好的,重点都讲到了,但是感觉讲的还是不深,于是就买了一本c++经典巨著《C++ Primer》第五版,这本书超级好,讲的很深很全面,正好是我需要的,因此花了十多天把这本书看了前三部分,看完以后给我的感觉是c++太牛叉了,果然很强大。阅读期间没遇到很难懂的地方,不懂的稍微百度就懂了,我是只看哈,没时间练习,我需要整体掌握这门语言的特性,这样才能很好的理解他和使用它,至于练习我放在了学习数据结构和算法,因为我就使用c++学习数据结构,肯定会有大量的练习,这样既可以学习数据结构和算法的实现又可以练习c++,这样更高效,当时我是这样计划的,结果也确实是这样的。后面就开始学习数据结构了。

    讲到学习数据结构,让我对数据结构很重视的原因就是清华大学邓俊辉老师的书数据结构(C++语言版)第三版_邓俊辉-清华大学,也有配套的视频教程,这本书和其他的数据结构讲解不同,他不是因为讲数据结构而讲数据结构,他是通过解刨c++库源码进行讲解,很强的,我们知道,c++有一个模板是Vector和list等模板,我们经常使用,但是你们知道内部原理嘛?邓老师的这本书就是从vector向量的内部接口函数开始讲解的,讲的超级好,里面涉及了排序,查找、删除、等等算法。关键是如果哪里看不懂可以看视频,这就很牛叉了,所以学习就没什么难度了,只要我们努力多加练习,反复理解和敲代码,掌握他们没什么难点,基本你把Vector理解了,后面的都不难了,很简单。我是怎么学习的呢?我是直接看书,我看书感觉最有味道,看不懂了,在好好理解,实在看不懂了在查查视频讲解,这样做的好处是理解的更深,如果基础一般的同学建议直接看视频,多学习几遍,我一边看书,一遍实现代码,使用c++,每遇到新的c++问题我就会查c++那本书,这样确实掌握一门语言很快,大家可以试试。目前我把数据结构前五章看完了,也练习完了,感觉挺不错了,掌握了大量的编程技巧(邓老师的书的代码技巧性太多了,值得好好学习和揣摩,一定要想想邓老师为什么这样写代码,优点在哪里?)。最重要的是解决问题的思路,一般邓老师会从根源讲解即先提出问题,然后给出问题的解决方案,最后分析方案的优劣,本人觉得,他的解决问题的思路和方法很重要,尤其分析问题时,把问题转换成数据结构方面的代码,虽然需要一点编程技巧,但是我们需要好好体会他问什么会这样做,有什么好处?例如实现一个算法的for循环条件或者while循环的条件,条件为什么这样写(判断条件肯定不是拍脑袋来的,肯定和你的算法有关,尤其特殊情况的判断更值得我们推敲和思考),还有就是与或非,利用编程语言的编译性质,为什么某个条件需要写在与的左边,写在右边如何?这里大家都要思考,不用简单的过一遍,如果简单的过一遍你是学不到什么东西的,你需要深入挖掘更深层的知识,多练习,多思考,这样不停的训练,时间长了,你的思维就会发生变化,该变化就是数据结构方面即把问题转换成代码的能力,大家别以为我在吹嘘,我是真感觉到了,遇到问题你能很快的想到代码如何写,如何设计等等,这才是我们需要提高的,您说呢?再过一段时间,结束后,我就会开始刷LeetCode,我觉的到时候刷题应该会很快,目前就这样,今天就到这里了。

展开阅读全文

没有更多推荐了,返回首页