为什么学习数据结构与算法?
开发工程师就是把实际的问题转化成计算机指令——设计出数据结构,再加以算法。
- review
- 计算机世界的基本规则
- 各种框架的原理对于算法应用
学习思路及方法
- 对数据结构和算法有一个全方位的了解
- 分类练习——一段时间只练习固定分类的题目,比如只练习二叉树的,开始之前,对其具体定义、概念、应用及可能出现的恶类型进行梳理了解再开始。
- 对一个类型针对性练习后,定期回顾,发现规律,进行总结。
最终达到的效果就是: 当你看到一个题目,首先你要想到它属于哪种数据结构与算法,然后想到这是一个什么类型的问题,然后是此类问题的解决方法。
时间复杂度
对象的时间复杂度是 O(1)
时间复杂度:基本操作重复执行的次数(频度),反映了程序运行开始到结束的时间。
没有循环语句,记作 O(1),也称为常数阶。
只有一重循环,记作 O(n),频度与问题规模 n 呈线性增大关系。
1 | // 常见的时间复杂度有: |
空间复杂度
空间复杂度——运行完一个程序所需的内存大小。
数据结构
数据元素之间存在的一种和多种特定的关系集合。从逻辑结构、存储结构这两个维度来理解它。
- 逻辑结构
数据之间的关系,可以分为两种:线性结构、非线性结构。- 线性结构: 一个有序数据元素的集合。数据元素之间的关系是一对一的,除了第一个和最后一个数据元素之外,其它数据元素都是首尾相连的。
a. 常用的线性结构有:栈、队列、链表、线性表。 - 非线性结构:各个数据元素不再保持在一个线性序列中,每个数据元素可能与零个或多个其他数据元素发生联系。
a. 常见的非线性结构: 二维数组、树等。
- 线性结构: 一个有序数据元素的集合。数据元素之间的关系是一对一的,除了第一个和最后一个数据元素之外,其它数据元素都是首尾相连的。
- 逻辑结构
存储结构
逻辑结构用计算机语言的实现。
常见的存储结构有:顺序存储、链式存储、索引存储以及散列存储。例如:
a.数组在内存中的位置是连续的,它就属于顺序存储;
b.链表是主动建立数据间的关联关系的,在内存中不一定连续,属于链式存储。
c.还有顺序和逻辑上都不存在顺序关系,但是你可以通过一定的方式去访问它的哈希表,数据散列存储???感谢掘金大大的文章,让我在学习算法的道路上茅塞顿开! 前端如何准备数据结构与算法
- 数据结构——二叉树——每个节点最多有两个子树的树结构(左子树、又子树)
树——用来模拟具有树状结构的数据集合。
- 数据结构——二叉树——每个节点最多有两个子树的树结构(左子树、又子树)
二叉树
前序遍历(根在前)
根、左、右
中序遍历(根在中)
左、根、右
后序遍历(根在后)
左、右、根