数据结构和算法(概念篇)
回想当年大学书本上的一句话:程序 = 数据结构 + 算法
数据结构就是将数据按照某种特定的结构来保存,设计良好的数据结构会导致好的算法
算法相当于逻辑,小部分已为人们发掘出来,可看成一种模式
数据结构 -> 存储
算法 -> 逻辑
基础概念
数据结构
- 数据:所有能被输入到计算机中,且能被计算机处理的符号的集合。是计算机操作的对象的总称
- 数据元素:数据(集合)中的一个 “个体”,数据及结构中讨论的基本单位
- 数据项:数据的不可分割的最小单位。一个数据元素可由若干个数据项组成
- 数据类型:在一种程序设计语言中,变量所具有的数据种类。整型、浮点型、字符型等等
-
逻辑结构:数据之间的相互关系(可将其分为 线性结构 和 非线性结构)
- 集合:结构中的数据元素除了同属于一种类型外,别无其它关系
-
线性结构:数据元素之间一对一的关系
- 线性表
- 链表(Linked list)
- 队列(Queue)
- 栈(Stack)
- 双队列
- 数组
- 串
- 线性表
-
树形结构:数据元素之间一对多的关系
- 二叉树
- 满二叉树
- 完全二叉树
- 二叉查找树(Binary Sort Tree)
- 平衡二叉树
- 平衡查找树之 AVL树
- 平衡二叉树之红黑树
- B树
- B+树
- 二叉树
- 图状结构或网状结构:结构中的数据元素之间存在多对多的关系
- 物理结构/存储结构:数据在计算机中的表示
- 顺序结构
- 链式结构
- 索引结构
- 哈希结构
- 。。。
算法
- 算法五个特性: 有穷性、确定性、可行性、输入、输出
- 算法设计要求:正确性、可读性、健壮性、高效率与低存储量需求(好的算法)
- 时间复杂度:算法的执行时间与原操作执行次数之和成正比
时间复杂度有小到大:O(1)、O(logn)、O(n)、O(nlogn)、O(n^2)、O(n^3)
幂次时间复杂度有小到大:O(2^n)、O(n!)、O(n^n) - 空间复杂度:只需要分析除输入和程序之外的辅助变量所占额外空间
输入数据所占空间只取决于问题本身,和算法无关