[转帖]各种数据结构性能的比较

各种,数据结构,性能,比较 · 浏览次数 : 0

小编点评

**数据结构** **数组** * 速度:最慢 * 优点:插入和删除快,查找效率高 * 缺点:大小固定,只能存储固定大小的数据 **链表** * 速度:稍慢于数组 * 优点:插入和删除速度相近,查找效率高 * 缺点:空间复杂度较高,插入和删除效率低 **树** * 速度:相对较快 * 优点:查找、插入、删除效率高 * 缺点:插入和删除算法复杂,空间复杂度高 **哈希表** * 速度:最快 * 优点:查找效率高,插入和删除效率低 * 缺点:预先需要知道存储的数据量,数据对存储空间的利用率不高 **其他** * 二叉树:插入、删除、查找效率相近,但插入算法比较复杂 * 红黑树:插入、删除、查找效率相近,但插入算法比较复杂 * Hash表:查找效率极高,但插入和删除效率低

正文

数据结构包括数组、链表、栈、二叉树、哈希表等等

数据结构优点缺点
数组插入快查找慢、删除慢、大小固定
有序数组查找快插入慢、删除慢、大小固定
后进先出存取其他项很慢
队列先进先出存取其他项很慢
链表插入、删除快查找慢
二叉树查找、插入、删除快算法复杂(删除算法)
红黑树查找、插入、删除快算法复杂
hash表存取极快(已知关键字)、插入快删除慢、不知关键字时存取很慢、对存储空间使用不充分
插入快、删除快、对大数据项存取快对其他数据项存取慢
依据现实世界建模算法有些复杂
AVL树查找、插入、删除快算法复杂

 

总结:

          通用数据结构:数组,链表,树,哈希表

          它们被称之为通用的数据结构是因为它们通过关键字的值来存储并查找数据,这一点在通用数据库程序中常见到(栈等特殊结构正好相反,它们只允许存取一定的数据项)。

         通用数据结构可以完全按照速度的快慢来分类:数组和链表是最慢的,树相对较快,哈希表是最快的。

         但并不是使用最快的结构永远是最好的方案。这些最快的结构也有缺陷,首先,它们的程序在不同程度上比数组和链表的复杂;其次,哈希表要求预先知道要存储多少数据,数据对存储空间的利用率也不是非常高。普通的二叉树对顺序的数据来说,会变成缓慢的O(N)级操作;而平衡树虽然避免了上述的问题,但是它的程序编制起来却比较困难。

         数组在下列情况下很有用:1数据量较小  2数据量的大小事先可预测  3如果存储空间足够大的话,可以放松第二条,创建一个足够大的数组来应付所有可以预见的数据输入。

         如果插入速度很重要的话,使用无序数组。如果查找速度很重要的话,使用有序数组,并用二分查找。数组元素的删除总是很慢,这是由于为了填充空出来的单元,平均半数以上的数组元素要被移动。在有序数组中的遍历是很快的,而在无序的数组不支持这种功能。

         如果需要存储的数据量不能预知或者需要频繁地插入删除数据元素时,考虑使用链表。当有新的元素加入时,链表就开辟新的所需要的空间,所以它甚至可以占满全部可用内存;在删除过程中没有必要像数组那样添补“空洞”。

 

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览51985 人正在系统学习中

与[转帖]各种数据结构性能的比较相似的内容:

[转帖]各种数据结构性能的比较

数据结构包括数组、链表、栈、二叉树、哈希表等等 数据结构优点缺点数组插入快查找慢、删除慢、大小固定有序数组查找快插入慢、删除慢、大小固定栈后进先出存取其他项很慢队列先进先出存取其他项很慢链表插入、删除快查找慢二叉树查找、插入、删除快算法复杂(删除算法)红黑树查找、插入、删除快算法复杂hash表存取极

[转帖]Kafka常见使用场景与Kafka高性能之道

https://juejin.cn/post/6958997115012186119 消息队列使用场景 队列,在数据结构中是一种先进先出的结构,消息队列可以看成是一个盛放消息的容器,这些消息等待着各种业务来处理。 消息队列是分布式系统中重要的组件,kafka就可以看做是一种消息队列,其大致使用场景:

[转帖]LSM-Tree:从入门到放弃——入门:基本概念、操作和Trade-Off分析

https://zhuanlan.zhihu.com/p/428267241 LSM-Tree,全程为日志结构合并树,有趣的是,这个数据结构实际上重点在于日志结构合并,和 tree 本身的关系并不是特别大(除了各种可能的天外飞仙式的工程优化,一般来说只有 level0 采用了平衡树的结构) LSM-

[转帖]Redis各种命令时间复杂度一览表

String类型 命令时间复杂度set0(1)get0(1)del0(k),k是键的个数mset0(k),k是键的个数mget0(k),k是键的个数incr0(1)decr0(1)incryby0(1)decryby0(1)incrybyfloat0(1)append0(1)strlen0(1)se

[转帖]configure 各种配置

https://api.dandelioncloud.cn/article/details/1487329970564485121 —build=编译该软件所使用的平台 —host=该软件将运行的平台 —target=该软件所处理的目标平台 具体到不同的交叉编译器 —build —host —tar

[转帖]一文搞懂各种数据库SQL执行计划:MySQL、Oracle等

https://zhuanlan.zhihu.com/p/99331255 MySQL 执行计划 Oracle 执行计划 SQL Server 执行计划 PostgreSQL 执行计划 执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行 SQL 语句的具体步骤,例如通过索

[转帖]龙芯 vs 飞腾:各种测试数据看国产CPU水平

https://zhuanlan.zhihu.com/p/99921594 2019年年末,龙芯、飞腾两大国产CPU巨头更是相继组织了规模宏大的年会,发布了新型桌面芯片及其整机产品,顿时硝烟四起。各大媒体也都很嗨,zyt、xhs、rmrb都对两个盛会做了报道,环球更是发表了第三方文章,把龙芯吹捧了一

[转帖]TiDB 中的各种超时

https://docs.pingcap.com/zh/tidb/stable/dev-guide-timeouts-in-tidb 本章将介绍 TiDB 中的各种超时,为排查错误提供依据。 GC 超时 TiDB 的事务的实现采用了 MVCC(多版本并发控制)机制,当新写入的数据覆盖旧的数据时,旧的

[转帖]一张图看懂 SQL 的各种 join 用法

https://cloud.tencent.com/developer/article/1954012?areaSource=104001.79&traceId=7WZNP412yK3vh7ebw4th0 发布于2022-03-10 13:54:43阅读 870 下图展示了 LEFT JOIN、RI

[转帖]shell脚本中$0 $1 $# $@ $* $? $ 的各种符号的意义

概述 shell中有两类字符,一类是普通字符,在Shell中除了本身的字面意思外没有其他特殊意义,即普通纯文本;另一类即元字符,是Shell的保留字符,在Shell中有着特殊的含义。 今天主要介绍一下shell中字符$的各种用法。 转义字符$ 在linux shell脚本中经常用到字符 ,下面是 ,