几种复合类型的数据结构的比较(数组/链表/二叉树/平衡二叉树/红黑树)

一、数组

优点:

  • 内存大小固定,
  • 操作流程简单,查找数据方便;

缺点:

  • 内存要么很大,会浪费内存,要么很小,数据存储空间不够,
  • 删除或插入数据比较麻烦;

二、链表

优点:

  • 在内存中可以存在任何地方,不要求连续,
  • 链表大小不用定义,
  • 数据随意增删,增加数据和删除数据很容易。

缺点:

  • 查找数据时效率低,因为不具随机访问性,所以访问某个位置的数据都要从第一个数据开始访问,然后根据第一个数据保存的下一个数据的地址找到第二个数据,以此类推。要找到第三 个人,必须从第一个人开始问起。

三、二叉树

特点:

  • 左子树的节点值比父亲节点小,而右子树的节点值比父亲节点大。

优点:

  • 快速查找,不需要为二叉树预先分配固定的空间,所的元素在树中是排序好的。

缺点:

  • 极端情况下,时间复杂度会由O(logn)变成O(n),即变成了一种链式结构。

四、平衡二叉树

特点:

  • 具有二叉树的全部特性,每个节点的左子树和右子树的高度差最多为1。

优点:

  • 具有二叉树的所有优点,并解决了二叉树的 链式极端情况,时间复杂度保持在O(logn)。

缺点:

  • 每次进行插入/删除节点的时候,几乎都会破坏平衡树的规则(每个节点的左子树和右子树的高度差至多等于1 ),每次都需要调整,使得性能大打折扣。

五、红黑树

特点:

  • 具有二叉树的特点;
  • 根节点是黑色的;
  • 叶子节点不存数据;
  • 任何相邻的节点都不能同时为红色;
  • 每个节点,从该节点到达其可达的叶子节点路径,都包含相同数目的黑色节点。

优点:

  • 具有二叉树所有特点,
  • 与平衡树不同的是,红黑树在插入、删除等操作,不会像平衡树那样,频繁着破坏红黑树的规 则,所以不需要频繁着调整,减少性能消耗;

缺点:

  • 代码复杂
  • 查找效率比平衡二叉树低
相关推荐
CS创新实验室4 小时前
从顺序表到动态数组:数据结构的永恒基石与现代语言的优雅封装
数据结构·算法
8Qi86 小时前
LeetCode 23. 合并 K 个升序链表 —— 小顶堆(PriorityQueue)
数据结构·算法·leetcode·链表·
QiLinkOS6 小时前
《打破“用爱发电”:一种基于 Gitee 与时间戳的开源权益分配机制探索》
c语言·数据结构·c++·科技·算法·gitee·开源
Boom_Shu8 小时前
长方形的关系
数据结构·c++·算法
Lsk_Smion9 小时前
力扣实训 _ [543].二叉树的直径 _ [23].合并K个升序列表
数据结构·算法·leetcode
ID_1800790547312 小时前
淘宝商品详情数据接口深度解析:架构、鉴权、数据结构与实战
数据结构·架构
散峰而望12 小时前
【算法练习】算法练习精选:陶陶摘苹果(基础+升级)、Music Notes、字串变换,你能AC几道?
数据结构·c++·算法·leetcode·贪心算法·github·动态规划
凤凰院凶涛QAQ13 小时前
《Java版数据结构 & 集合类剖析》集合框架的封装设计与顺序表:“从 Iterable 到 ArrayList:集合框架的‘职业树“
java·开发语言·数据结构
8Qi813 小时前
LeetCode 148. 排序链表 —— 解法一:自顶向下递归(分治 + 归并)
数据结构·算法·leetcode·链表·递归·分治·归并
8Qi813 小时前
LeetCode 148. 排序链表 —— 解法二:自底向上归并(迭代,O(1) 空间)
数据结构·算法·leetcode·链表·归并·迭代