什么是数据结构
计算机存储数据的方式
抽象数据类型
集合结构 线性结构(数组, 链表, 栈, 队列) 树形结构 图形结构
big O
大O表示法各种数据结构的时间复杂度https://www.bigocheatsheet.com/ 最坏情况下(只关心n为无穷大时)复杂度的上限,复杂情况(越往下越复杂)
- O(1)
- O(log2n) 比如log2x的意思就是求x是2的多少次幂.
- O(n)
- O(nlog2n)
- O(n²)
- O(n³)
- O(2的b次幂,b>1)
- O(n!)
由于只关心n最大情况,所以以一个函数最大的那一部分来确定big O,比如
1 |
|
简化累加时间复杂度
1 |
|
看一个算法的时间复杂度主要是看循环次数(加减改变循环次数的忽略不计,乘除改变循环次数的是log乘数/除数n)。
1 |
|
线性表
静态数组和动态数组
数组总要特性:内存连续
静态数组使用场景
- 存储有序数据
- 存储临时对象
- IO
- 查找表和反查找表
- 从一个函数中返回多个值
- 缓存
数组类型/操作 | static array | dynamic array |
---|---|---|
Access | O(1) | O(1) |
Search | O(n) | O(n) |
Insertion | N/A | O(n) |
Appending | N/A | O(1) |
Deletion | N/A | O(n) |
链表
(火车组)
(单链表)每一个对象都会包含对象本身及后面一个对象的首地址, 最后一个对象携带的后面地址为null
栈
后进先出(货架上的货品)
限定仅在表尾进行插入或删除操作的线性表。也就是说它有两个操作,且操作数都在线性表尾部
队列
先进先出(排队办业务)
是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。