如何合理地组织数据、高效地处理数据,这就是“数据结构”主要研究的问题.
数据结构主要研究非数值计算问题,非数值计算问题无法用数学方程建立数学模型.
数据在计算机中实际存储方式,无非2种: 顺序存储结构
和 链式存储结构
.
当然,我们更熟悉的是,在分析具体问题时,我们通常可以抽象成一些和实际存储无关的逻辑结构:
-
线性结构
- 一般线性表:
- 线性表
- 特殊线性表:
- 栈
- 队列
- 字符串
- 线性表的推广:
- 数组
- 广义表
- 一般线性表:
-
非线性结构
- 树
- 二叉树
- 图
- 有向图
- 无向图
- 树
去理解,最基本的两种的存储结构,在每种程序设计语言中,都设计了相对应的"data type"(数据类型)去描述它. 例如我们在Go中可以定义一个Array Type,它就是用于描述顺序存储结构的. Go语言中,每种可以被定义的数据类型,它都是怎么被设计来描述啥的: 顺序存储结构可以用哪些Type来描述: [3]int 链式存储结构可以用哪些Type来描述:
###Index
双指针
二分查找
二叉树 inorder preoder postorder 递归/迭代 层序遍历 BFS(迭代)-借助队列作为辅助结构 DFS(递归)-递归方式(隐含使用了系统的栈)
队列
栈 DFS使用递归实现、在执行递归时栈的作用? 另一个没有递归的DFS的实现
BFS 的两个主要方案:遍历或找出最短路径
Go内置库: https://golang.org/pkg/container/list/ 双向链表 https://golang.org/pkg/container/heap/ 堆操作 https://golang.org/pkg/container/ring/ 循环列表
一种逻辑结构如果用不同的存储结构去描述或解析,可能就是不同的算法思路? 可以这么理解吗