活动地址:CSDN21天学习挑战赛
目录
一、什么是数据结构与算法
程序 = 数据结构 + 算法,足以看出他们的重要性,但感觉平时编程没有刻意用到他们,其实这只是感觉,代码的字里行间无不在使用。
一个常见的心理路程就是:
- 开始学习时,感觉他们没什么用,平时敲代码也用不到,没有在代码里刻意设计过
- 学习一段时间,发现以前写代码都在悄悄的用到,然后开始刻意按照规则设计代码
- 时间久了,又感觉没有用到了,其实是在下意识的用了,只是用的时候没有刻意贴上“数据结构与算法”的标签
就像《论语》中说的,三十而立,四十不惑,,,直到随心所欲不逾矩。
1. 数据结构
逻辑结构:数据元素之间的逻辑关系。
存储结构:一组数据的存储结构。(数据在内存中是以何种方式存储的)
2. 算法
操作数据的一组方法。
算法的设计取决于逻辑结构,算法的实现依赖于存储结构。
3. 数据结构与算法
数据结构是为算法服务的,算法要作用在特定的数据结构之上。无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构。数据结构是静态的,它只是组织数据的一种方式。如果不在它的基础上操作、构建算法,孤立存在的数据结构就是没用的。
二、常见数据结构与算法
10 个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;
10 类算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。
要学习它的“来历”、“原理”、“自身的特点”、“适合解决的问题”以及“实际的应用场景”。
三、学习方法(仅供参考)
1. 大致了解
在正式学习之前,建议大致了解一下 “数据结构与算法” 的知识框架,包括哪些内容,著名应用等。
可以自己画一下思维导图,让知识框架在心里有个初步印象(所以说第一印象还是蛮重要的,哈哈)。
2. 视频和书
不推荐一开始就看书,可以去B站找一下视频,然后跟着视频学习,最好理解一个知识点后自己写代码验证练习一下。
书只作为辅助,有不懂的知识点看书帮助理解。
3. 练习
实践是检验真理的唯一标准,能不能写出能跑能用的稳定代码是检验你会不会的最好方法。
GitHub或Gitee建个仓库,把自己的实践代码传上去,最好是个有价值的项目。
4. 输出
自己会做只是会了而已,不代表完全理解了,能讲出来并且讲明白,通俗易懂,才是真正吃透了知识。
而且在输出的同时,还会发现自己的不足或新的理解。
所以建议学的差不多了,写个教程,写的过程中对自己的知识结构查缺补漏。
四、学习资源(有更好的资源欢迎评论区补充)
1. 书
不推荐某一本书,建议几本书对比看,虽然知识点一样,但不同书的讲解方法不一样,每个人对不同方法的理解程度不一样,对比起来更容易理解。
比较经典的:
比较通俗易懂的:
2. 在线教程
3.视频
4. 可视化
部分算法的过程可视化,辅助理解
- VisuAlgo
- Data Structure Visualizations
- binarytrees , 该项目源码 -> github
- b-tree
- algorithm-visualizer
- bigocheatsheet
- Algorithms-DataStructures-BigONotation
5. 刷题