labuladong 的算法秘籍-读书笔记-学习算法和刷题的框架思维
一、数据结构的存储方式
数据结构的存储方式只有两种:数组(顺序存储)和链表(链式存储)。
所有的数据结构的基础都是数组或者链表
数组
优点
因为存储空间是连续的,所以查找方便
缺点
但是要插入或者删除中间元素,需要移动后续所有的元素,所以插入删除比较麻烦
并且扩容的时候需要将旧数组数据迁移到新数组,也比较麻烦
链表
优点
与数组相反,链表的插入删除很方便,只需要修改指向的指针即可,扩容时,修改最后一个元素的指针指向新地址。
缺点
因为存储空间不连续,所以查找元素,需要一个个元素遍历找,不能随机访问。并且需要存储前后元素地址,消耗更多存储空间。
二、数据结构的基本操作
遍历+访问 增删改查
各种数据结构的遍历 + 访问无非两种形式:线性的和非线性的
线性就是 for/while 迭代为代表,非线性就是递归为代表。
所有数据结构的遍历基本都是由for/while或者递归或者他们的组合实现的
三、算法刷题指南
数据结构是工具,算法是通过合适的工具解决特定问题的方法。
作者建议的刷题顺序
1、先学习像数组、链表这种基本数据结构的常用算法,比如单链表翻转,前缀和数组,二分搜索等。
2、学会基础算法之后,不要急着上来就刷回溯算法、动态规划这类笔试常考题,而应该先刷二叉树,先刷二叉树,先刷二叉树
因为二叉树是最容易培养框架思维的,而且大部分算法技巧,本质上都是树的遍历问题。
综上,对于畏惧算法的同学来说,可以先刷树的相关题目,试着从框架上看问题,而不要纠结于细节问题。

