首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >数据结构中二叉树,哈希表,顺序表,链表的比较补充

数据结构中二叉树,哈希表,顺序表,链表的比较补充

作者头像
三三是该溜子
发布2024-12-30 10:58:14
发布2024-12-30 10:58:14
2160
举报
文章被收录于专栏:该溜子的专栏该溜子的专栏

阿华代码,不是逆风,就是我疯,希望本文内容能帮到你!你们的点赞收藏是我前进最大的动力!!

零:引入

查询时间复杂度,我们默认是以最坏的情况来看,其次说平均,基本不会说最优的情况,

平衡二叉树,查询能达到O(logN),快于O(N),近似理解成O(1)

一:二叉搜索树

元素非常多,树的高度就很高,就会增加查询过程中的次数,如果实在数据库中就会比较敏感了,每次比较都可能会涉及到硬盘操作,

二:哈希表

1:速度最快O(1),哈希表会在合适的时机进行扩容,可以保持整体的时间复杂度任然是O(1),在实际开发中,我们用到的最多的就是hash表和数组

2:查询大致步骤——哈希表是把key转换为数组下标(通过一定的哈希函数),再在对应的数组下标中进行查找,这里只能比较相等

3:与数据库异——数据库查询的时候,经常需要指定条件,不是一定按照 相等 来比较的 例如:<> between and 范围查询

三:ArrayList

错误说法:ArrayList 查找速度比较快,LinkedList新增删除的速度比较快。

1:ArrayList底层使用的是数组,可以进行随机访问,每次随机访问进行读写的时候,速度是比较快的

2:随机访问不是查找,查找使用的是indexOf 这样的方法,按照元素的值进行查找,这个过程是要遍历ArrayList 开销为O(N)

3:ArrayList 尾插入/删除的速度比较快,但是头/中间/尾插入,删除元素比较慢(会对元素进行搬运)

四:LinedList

1:特点

底层是一个链表,不能进行随机访问

进行头/尾插,头/尾删时间复杂度都是O(1)

进行查找/中间位置的插入删除操作,都是O(N)

总结:相比较于ArrayList优势在于能够快速的进行头插、头删,在实现队列的时候很有用,其他方面ArrayList更优

2:三问:

(1):用LinkedList 是否遍历速度更快呢?

答:链表访问下个元素的操作是用next这个引用,相比较顺序表元素下标++的操作,多了一次内存访问的过程

(2):ArrayList是要预分配空间的,那么用LinkedList是否更节省内存呢?

答:链表的每一个节点都要有额外的空间储存指针,具体谁更省,有待考虑

(3):用LinkedList ,在中间位置插入删除,为什么是O(N)?

LinkedList 是通过add(元素,下标)进行插入,这个根据下标找位置的过程,就是链表遍历O(N)的操作。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 零:引入
  • 一:二叉搜索树
  • 二:哈希表
  • 三:ArrayList
  • 四:LinedList
    • 1:特点
    • 2:三问:
    • (1):用LinkedList 是否遍历速度更快呢?
    • (2):ArrayList是要预分配空间的,那么用LinkedList是否更节省内存呢?
    • (3):用LinkedList ,在中间位置插入删除,为什么是O(N)?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档