简介
数据结构即数据的存储结构,不同的存储结构存在不同的优劣,数据结构与算法一般而言是密不可分的,因为实现相应的存储结构之后难免会提供相应的算法,几乎每一种存储结构都会提供一些基本的操作,即“增删改查”。
根据是否修改数据结构,所有操作大致分为两类方式:
- 静态:仅读取,数据结构的内容及组成一般不变:查找
- 动态:需写入,数据结构的局部或整体将改变:增加、删除
数据结构通常可分为:
- 线性数据结构:线性表、栈、队列
- 非线性数据结构:树、图
特别的,线性表又具体分为顺序表和链表,而树也可以理解为半线性数据结构。
也可以按照数据访问方式分为:
- 寻秩访问(call by rank):顺序表
- 寻位置访问(call by position):链表
- 寻关键码访问(call by key):二叉搜索树
- 寻优先级访问(call by priority):优先级队列
- 寻数值访问(call by value):哈希
常见数据结构的相关操作的时间复杂度:
| 数据结构 | 顺序表 | 链表 | 二叉树 | 二叉搜索树 | 图 | 哈希表 |
|---|---|---|---|---|---|---|
| 增加 | \(O(n)\) | \(O(1)\) | \(O(logn)\) | \(O(logn)\) | \(O(n)\) | \(O(n)\) |
| 删除 | \(O(n)\) | \(O(1)\) | \(O(logn)\) | \(O(logn)\) | \(O(n)\) | \(O(n)\) |
| 修改 | \(O(1)\) | \(O(n)\) | \(O(logn)\) | \(O(logn)\) | \(O(n)\) | \(\approx O(1)\) |