基础数据结构对比 数组、链表、栈、队列

数组

数组分为静态数组和动态数组,有着查询复杂度为O(1)的优点。

  • 静态数组:最简单的数组实现
  • 动态数组:动态数组相较于普通数组,具有动态扩容的特性。当size等于数组大小时对数组扩容,以当前大小的2倍进行扩大。当size等于数组大小的1/4时,将数组缩小一半。利用均摊复杂度分析,扩容和缩容复杂度都为O(1)。

链表

链表虽然查询需要遍历整个链表,复杂度为O(n),但是链表是真正的动态数据结构,不用担心容量的问题

栈的实现可以为基于数组的栈和基于链表的栈,栈的应用很多,有JVM的虚拟机栈和计算器的运算以及word文档的撤回功能等等。

队列

队列是一种先进先出的数据结构,具体实现有三种

  • 基于动态数组实现的队列
    作为最简单的实现,它在性能上有着十分突出的缺点,那就是出队列的这个操作复杂度为O(n),对于队列来说会频繁入队出队,每次出队都是O(n)是十分不好的。
  • 基于静态数组的循环队列
    循环十分巧妙的运行的取余(%)这个算数符号,维护了两个引用,分别指向队首和队尾,出队和入队操作仅仅只是维护了一下这两个引用。同时在扩容和缩容时也需要注意这队首一样大的偏移量。
  • 基于链表实现的队列
    链表的队列我们会发现在头节点,添加和删除节点都是比较容易的,但是在尾节点,添加节点比较容易,删除节点比较复杂。所以若要实现队列,我们也应维护两个节点,一个是尾节点,一个是头节点,其中头节点进行删除操作,扮演队首的角色,尾节点进行添加操作,扮演队尾。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值