最近看一本讲编程艺术的书,里面提了个问题:常见数据结构有哪些?以前都是用到什么数据结构,去查相应资料,一直没仔细想过这个问题,一时心血来潮,决定做个表格,总结下几种数据结构的特点。如果哪位大神发现了错误,请通知小弟一声,小弟马上修改,谢谢。
名称 | 描述 | 随机访问时间复杂度 | 特点 | 优点 | 缺点 |
数组 | 数据类型的元素按一定顺序排列的集合 | O(1) | 连续存储 | 访问快 | 大小固定 存储效率低 |
向量 | 其实向量是一个动态数组 | O(1) | 连续存储 | 动态分配数组大小 | 增长过快的时候比较耗资源 |
链表 | 由一系列称为表的节点的对象组成 | O(N) | 不连续、大小不固定 | 中间任意位置添加删除元素的都非常的快 | 空间和时间额外耗费较大 |
栈 | 只能在一端进行插入和删除操作 | O(N) | LIFO | 提供后进先出的存取方式 | 存取慢 |
队列 | 只能一端进一端出 | O(N) | FIFO | 提供后进后出的存取方式 | 存取慢 |
堆 | 堆是一种特殊的树形数据结构,每个结点都有一个值 | O(N lg N) | 可以被视为一科完全二叉树结构。它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆) | 插入,删除块,对最大数据的项存取很快 | 对其他数据项存取很慢 |
哈希表 | 根据关键码值而直接进行访问的数据结构 | O(1) | 键值对存储,访问快,元素不能重复 | 访问快 | 空间消耗大 |
二叉树 | 每个父节点最多只能有两个子节点。每个父节点的子节点都是从左到右的树 | O(logn) |
| 高效创建和更新 | 删除节点比较麻烦 |
图 | 是一种复杂的非线性数据结构 | 多项式 |
| 直观表示模型 | 慢、算法复杂 |