【数据结构与算法分析】01:表、栈和队列

  • 写在前面:该类文章作为笔者的读书笔记,仅供参考。

数组: 动态指定,但需要对于大小的最大值进行估计(估计过大浪费空间);插入删除平  均需要移动表一半的元素,最坏情况为 O(N )

  1. 线性查找的话,时间复杂度为O(N)
  2. 二分查找的话时间为O(longN)
  3. 无序数组插入的时间复杂度为O(1)
  4. 有序数组插入的时间复杂度为O(N)
  5. 删除操作的时间复杂度均为O(N)

链表: 不连续存储(避免插入删除的线性开销),每个结构均包含表元素和指向包含该元素后继元的结构的指针( next 指针)

  1.  在表头插入和删除速度很快,仅需改变一两个引用值,所以话费O(1)的时间
  2. 平均起来,查找、删除和在指定节点后面插入都需要搜索链表中的一半节点,需要O(N)次比较

  • 链表比数组优越的另一个重要方面是链表需要多少内存就可以用多少内存,并且可以扩展到所有可用内存。

栈: 插入和删除只能在一个位置上进行,即表末端,称为栈顶( top );基本操作有进栈( push )和出栈( pop );别称 LIFO (后进先出)表

  1. 用数组和链表实现
  2. 数据项入栈和出栈的时间复杂度均为O(1)

  • 应用:平衡符号、后缀表达式、中缀到后缀的转换、函数调用(存储活动记录,递归函数会导致栈溢出)

队列: 基本操作是入队( enqueue ),在队尾( rear )插入元素;有出队( dequeue ),在队头( front )删除(或返回)元素

  1. 可用数组实现(循环数组,解决数组下标满的问题)
  2. 队列中插入数据项和删除数据项的时间复杂度均为O(1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值