论数据结构的上层建筑和底层基础
1 上层建筑和底层基础解释
上层建筑
- hash table
- stack
- queue
- heap
- tree
- graph
底层基础
- 数组
- 链表
分类原因
多种多样的数据结构都脱离不了底层基本存储结构,即数组和链表。数据结构其实就是基于数组或链表,增加不同的API接口,实现不同的特性。
2 详细解释
queue & stack
这两种数据结构既可以使用数组实现,又可以用链表实现。
- 使用数组实现时,需要考虑扩容/缩容等问题;
- 使用链表实现时,需要考虑内存空间占用等问题;
graph
- 邻接表
1 基于链表实现;
2 图比较稀疏情况下优先;
3 节省空间,但效率相对低; - 邻接矩阵
1 基于二维数组实现;
2 判断连通性快;
3 效率高但空间占用多;
hash table
实现原理:通过hash function将key映射到一个数组中。
解决hash冲突的方法:
- 拉链法
使用链表特性,操作简单,但是,需要额外空间存储指针; - 线性探查法
使用数组特性,方便连续寻址,不需要额外空间,但是,操作复杂;
tree
- 基于数组
基于数组实现就是堆,堆是一完全二叉树;
不需要节点指针,操作相对简单 - 基于链表
即常见的树,不一定是完全二叉树;
延申:二叉搜索树/AVL树/红黑树/区间树/B树/…
3 底层基础比较
数组
紧凑连续存储 -> 随机访问,快速定位,节约空间
连续存储 -> 内存空间须一次性分配足,扩容时需要重新申请,再复制,增删操作复杂度O(N)
链表
元素不连续,依赖指针指向下一节点 -> 无扩容问题,耗费内存空间更多
非连续存储 -> 增删操作复杂度O(1),但是无法随机访问