对于特定的任务,数据结构的选择需要基于以下几点考量。
首先,你的数据是具有某种形态的,并且有一些必要的操作方法。如果你想基于关键字来查找对象,需要的是字典类型的数据结构;如果你的数据原生就是分层级的,就需要某种类型的树形结构;而如果你的数据是线性的,则你需要的是数据结构可能就是栈或队列等。
其次,具体的选择还与你在实际使用中最常用的操作方法有关,因为不同的数据结构都对不同的操作方法做了优化。举例来说,如果你经常需要获取集合中的某些较为重要的元素,那么使用堆或优先队列就比普通的数组要好很多。
绝大多数情况下,使用 Swift 内建的 Array
、Dictinary
、Set
就足够高效了,但某些时候,可能还是需要某些更合适的数据结构...
数组变体
二维数组-固定尺寸的二维数组,可用于棋盘游戏。
比特集-*n** 位大小固定尺度的序列。
*固定长度数组-如果你确切的知道数据的大小,使用老式的固定长度的数组会更加高效。
*有序数组-一个永远有序的数组。
*Rootish Array Stack - 空间时间高效率的Swift数组
队列
列表
树
*树-通用目的的树形结构。
*二叉树-一种节点最多有两个孩子节点的树形结构。
二叉搜索树(BST)-以某种方式组织自己的节点的二叉树,以求较快的查询速度。
*红黑树 - 自平衡二叉搜索树
*AVL 树-一种通过旋转来维持平衡的二叉搜索树。
*伸展树- 自平衡二叉搜索树允许快速检索最近更新的节点
*线索二叉树 - 一种二叉搜索树通过额外的数据加快遍历并降低消耗
*线段树-能够快速地对某区间进行计算。
k-d 树
稀疏表 又一个可以对数组部分做计算的数据结构,但是这次可以更快!
*堆-存储在一维数组中的二叉树,所以它不需要使用指针。很适合做为优先队列使用。
斐波那契堆
*字典树 - 一种特殊类型的树结构用来保存关联数据的结构
*B 树 - 自平衡搜索树,每个节点可以超过两个子节点
*基数树是将指针与long整数键值相关联的机制,它存储有效率,并且可快速查询
哈希
*哈希表-允许你通过一个关键词来存取数据。字典通常都是基于哈希表实现的。
哈希函数