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

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

小编点评

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

正文

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

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

 

总结:

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

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

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

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

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

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

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

 

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

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

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

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

[转帖]mysql百万级性能瓶颈-数据库选型

项目中使用了mysql数据库,但数据量增长太快,不久到了百万级,很快又到表到了千万级,尝试了各种优化方式,最终效果仍难达到秒级响应,那么引发了我关于数据库选型到一些思考。 1、mysql的单表性能瓶颈究竟是多少? 曾经在中国互联网技术圈广为流传着这么一个说法:MySQL 单表数据量大于 2000 万

[转帖]mysql百万级性能瓶颈-数据库选型

项目中使用了mysql数据库,但数据量增长太快,不久到了百万级,很快又到表到了千万级,尝试了各种优化方式,最终效果仍难达到秒级响应,那么引发了我关于数据库选型到一些思考。 1、mysql的单表性能瓶颈究竟是多少? 曾经在中国互联网技术圈广为流传着这么一个说法:MySQL 单表数据量大于 2000 万

[转帖]实测:云RDS MySQL性能是自建的1.6倍

https://www.cnblogs.com/zhoujinyi/p/16392223.html 1. 摘要 基于之前写的「云厂商 RDS MySQL 怎么选」的文章,为了进一步了解各云厂商在RDS MySQL数据库性能上的差异,本文将对自建MySQL、阿里云、腾讯云、华为云和AWS 的 RDS

[转帖]nmon使用及监控数据分析

【使用】 【监控数据分析】 参考链接:nmon监控数据分析 性能测试中,各个服务器资源占用统计分析是一个很重要的组成部分,通常我们使用nmon这个工具来进行监控以及监控结果输出。 一、在监控阶段使用类似下面的命令 ./nmon -f write_3s_20vu.nmon -t -s 30 -c 10

[转帖]CPU性能监控之一------CPU架构

CPU性能监控之一 CPU架构 https://blog.51cto.com/hl914/1557231 先说下CPU的缓存吧,都知道CPU的缓存是分为L1,L2和L3的,L1又分为数据缓存和指令缓存,每颗CPU核心都有自己的L1和L2,但L3是各核心共享的,一但涉及共享的东西,当然就有竞争咯。 S

[转帖]Redis是的缓存特征及类型

文章目录 缓存特征缓存处理请求的两种情况缓存的类型只读缓存读写缓存 缓存特征 一个系统中的不同层之间的访问速度不一样,所以我们才需要缓存,这样就可以把一些需要频繁访问的数据放在缓存中,以加快它们的访问速度。 计算机系统中的三层存储结构,以及它们各自的常用容量和访问性能 计算机系统中,默认有两种缓存:

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

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

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

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

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

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