常用数据据优缺点以及排序算法时间空间复杂度总结

常用数据结构优缺点对比

 

常用数据结构使用场景优点缺点备注
数组数据量小、数据规模已知在已知下标的情况下可以随机访问修改元素值O(1)大小固定,删除,插入效率低,存储数据种类单一创建时在内存中预留一块连续的区域,内存空置率高利用率较低,删除某一个,右序位置都会受到影响,有序数组比无序查找更快
链表数据量较小,需要频繁增加,删除操作的场景插入、删除快,内存利用率高因为含有大量的指针域,占用空间较大;查找元素需要遍历链表来查找O(n),效率低创建时不指定大小,内存大小随数据量变化;内存的存储位置可以在任何地方,不要求连续,可扩展性强;每一个数据保存邻近的数据的地址
顺序栈输入数据量可预知,应用于实现递归功能方面,例如斐波那契数列。提供一种后入先出的存储方式只能在一头操作数据,存取其他项很慢,如果对数组大小创建不当,可能会产生栈溢出的情况在输入数据可预知的情况下,使用数组实现栈,并且数组实现栈效率更高,出入栈都在数组末尾
链栈输入数据量未知不会出现栈溢出由于入栈时,需要创建插入节点,要向操作系统申请内存,所以链栈没有顺序栈效率高同上
队列数据量小、数据规模已知提供一种先入先出的存储方式只能在一头添加,另一头获取存取其他项很慢如果数据量已知就使用数组实现队列,未知就使用链表实现,出队和入队均是O(1)
二叉查找树结合数组和链表的优点,适合数据量较大且数据是随机分布的查询增删速度较快(如果树平衡),存储的数据类型相对灵活,不指定内存大小,内存利用率较高1.只能从根节点开始查询,不具备随机访问性;2.插入数据不随机且连续有序时,构造的二叉树就会只有左子树或右子树,形成一种链式结构,查询增删效率O(logN)降低,甚至接近链表为O(n)具有一定顺序,左子节点值较小,右子节点值较大
平衡二叉树(红黑树)无论数据是否随机分布都能提供O(logN)级别的查询,增删效率改善了二叉搜索树的缺点实现起来稍微复杂,平衡树结构会产生了额外开销它的前提是一个二叉搜索树,且任意节点的子树的高度差都小于等于 1,改善了二叉搜索树的缺点
堆(完全二叉树)常用于实现优先队列,如针对TOP型排序问题(获取最大或最小前n项)插入删除较快,对最值数据项存取很快对其他项存取很慢堆是一颗完全二叉树,堆中任意节点总是不大于或不小于其子节点的值。
哈希数据量大且不需要对最大最小值存取关键字已知则存取速度极快如果不知道关键字则存取很慢;基于数组,创建后扩展性差;数据没有顺序概念哈希表中的 key 是不允许重复的;基于哈希映射,会有冲突产生
对现实世界的建模直观有些算法慢且复杂

 
 

排序算法对比

 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值