常见数据结构

常见数据结构

在计算机科学中,数据结构(英语:data structure)是计算机中存储、组织数据的方式。 数据结构意味着介面或封装:一个数据结构可被视为两个函数之间的介面,或者是由数据类型联合组成的存储内容的访问方法封装。本文介绍一些常见的数据结构以及查询时间复杂度。

数组
  • 所谓数组,是相同数据类型的元素按一定顺序排列的集合。
  • 特点: 长度固定,无法动态扩展,空间分配快,存在空间浪费,查询效率高。

链表
  • 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
  • 特点:动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。

二叉树
  • 有一个ROOT节点
    • 每一次查询都需要从一个节点开始进行,如果是图类的数据结构,则起点是不固定的。
  • 一个节点有两个子节点
    • 与拥有多个子节点的树相比,两个子节点会让树变得更深,好处二叉排序树时会看到。
  • 父节点都有一个到子节点的引用(指针)
    • 有些时候,为了遍历方便,还需要一个从子节点到父节点的引用(指针)。

二叉有序树
  • 左边的子节点上的数据一定比父节点的小。
  • 右边子节点一定比父节点的数据大。
平衡二叉有序树
  • 一棵空树或它的左右两个子树的高度差的绝对值不超过 1。
  • 左右两个子树都是一棵平衡二叉树。

跳表(skiplist)
  • 由很多层结构组成
  • 每一层都是一个有序的链表。
  • 最底层(Level 1)的链表包含所有元素。
  • 如果一个元素出现在 Level i 的链表中,则它在 Level i 之下的链表也都会出现。
  • 每个节点包含两个指针,一个指向同一链表中的下一个元素,一个指向下面一层的元素。

B 树
  • 保持数组大小不变,增加数组的个数。
  • 树高:一般来说,树的高度要比二叉平衡树低很多。
  • 数组:每一个node,都是一个“数组”。

B+ 树
  • Branch节点不能直接查到数据后返回,数据必须读穿或写穿到leaf节点后才能返回。
  • 子叶节点的最后一个元素是到下一个leaf节点的指针。

查询时间复杂度
  • 数组: 数组中第 n 个数据的时间花费是 O(1) 但是要在数组中查找一个指定的数据则是 O(N)。
  • 链表: 查找一个节点或者访问特定编号的节点则需要 O(n) 的时间。
  • 二叉树:普通二叉树查询每个结点只需遍历一次,故时间复杂度为O (n)。
  • 二叉有序树: 因为有序,最好的情况是 O(logn),但是可能不平衡,最坏是 O(n)。
  • 平衡二叉有序树:O(logn)。
  • skiplist: O(logn)。
  • B树: O(logn), B 树相比于普通的平衡二叉树在于其节点是个数组,他的树高度比较低。
  • B+ 树:O(logn)B+ 树相比 B 树 在于Branch节点不能直接查到数据后返回,数据必须读穿或写穿到leaf节点后才能返回,子叶节点的最后一个元素是到下一个leaf节点的指针。这样的好处很好支持范围查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值