对于特定的任务,数据结构的选择需要基于以下几点考量。

首先,你的数据是具有某种形态的,并且有一些必要的操作方法。如果你想基于关键字来查找对象,需要的是字典类型的数据结构;如果你的数据原生就是分层级的,就需要某种类型的树形结构;而如果你的数据是线性的,则你需要的是数据结构可能就是栈或队列等。

其次,具体的选择还与你在实际使用中最常用的操作方法有关,因为不同的数据结构都对不同的操作方法做了优化。举例来说,如果你经常需要获取集合中的某些较为重要的元素,那么使用堆或优先队列就比普通的数组要好很多。

绝大多数情况下,使用 Swift 内建的 ArrayDictinarySet 就足够高效了,但某些时候,可能还是需要某些更合适的数据结构...

数组变体

队列

  • -后进先出!

  • 队列-先进先出!

  • *双端队列

  • *优先队列-一个保持最重要的元素总是在最前面的队列。

  • *环形缓冲区-一个语义上的固定大小的环形缓冲区,实际使用的是一维序列头尾相接实现。

列表

  • *链表-链接起来的数据序列。包含单向和双向链表。

  • *跳跃表- 跳跃表是一种随机化的数据结构与AVL/红黑树有着相同的时间复杂度O(logN),并且更新和搜索更加高效简单。

  • *树-通用目的的树形结构。

  • *二叉树-一种节点最多有两个孩子节点的树形结构。

  • 二叉搜索树(BST)-以某种方式组织自己的节点的二叉树,以求较快的查询速度。

  • *红黑树 - 自平衡二叉搜索树

  • *AVL 树-一种通过旋转来维持平衡的二叉搜索树。

  • *伸展树- 自平衡二叉搜索树允许快速检索最近更新的节点

  • *线索二叉树 - 一种二叉搜索树通过额外的数据加快遍历并降低消耗

  • *线段树-能够快速地对某区间进行计算。

  • k-d 树

  • 稀疏表 又一个可以对数组部分做计算的数据结构,但是这次可以更快!

  • *堆-存储在一维数组中的二叉树,所以它不需要使用指针。很适合做为优先队列使用。

  • 斐波那契堆

  • *字典树 - 一种特殊类型的树结构用来保存关联数据的结构

  • *B 树 - 自平衡搜索树,每个节点可以超过两个子节点

  • *基数树是将指针与long整数键值相关联的机制,它存储有效率,并且可快速查询

  • *四叉树

  • *八叉树

哈希

  • *哈希表-允许你通过一个关键词来存取数据。字典通常都是基于哈希表实现的。

  • 哈希函数

集合

  • *布隆过滤器-一个常量内存数据结构,用于概率性的检测某个元素是否在集合中。

  • *哈希集合-使用哈希表实现的集合。

  • *多重集 - 可以重复添加元素的集合

  • *有序集-很看重元素顺序的集合。

Made with in Shangrao,China By 老雷

Copyright © devler.cn 1987 - Present

赣ICP备19009883号-1