浅谈---栈与队列

        栈与队列是计算机中非常常用的两种数据结构,在计算机文件的检索以及函数的递归调用你都能看到栈的影子,而队列在模拟一些我们日常生活中的例子时会有奇效.在认识队列和栈我先问大家一个问题:队列和栈是容器吗?它们不是容器!它们是容器的适配器,底层是用容器来实现的一种操作受限制的数据结构(默认使用deque来实现,当然其他容器也可以),所以关于栈和队列的内存是否连续也是由它们底层容器来决定的,比如deque严格来说就不是连续的,所以以它为基础的队列和栈也自然就不是连续的了.

        栈很适合处理一些相邻元素的问题,就比如最经典的括号匹配问题:我们发现最先匹配的左括号都是跟它相邻的一个括号匹配的,且我们会发现越是先出现的左括号就是越在后面才能匹配,这正好与栈的特性----"先进后出"符合(力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台),所以使用栈就显得尤为合适了.若我们遇到一道需要考虑相邻元素存在某种关系时,或者当遇到某种情况下需要之前的元素进行操作时就可以考虑使用栈了,相关习题有:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

        队列的最大特点就是:"先进先出".若是遇到问题符合这种特性我们就可以使用队列来求解,这里我就不多讲了,我主要讲两种特殊队列:单调队列和优先级队列.

        单调队列顾名思义是内部元素呈现出单调递减或者单调递增的排列.我们需要使用容器来作为这个队列的基础,然后再插入元素时制定某种规则来维护我们的单调队列.由此可见若我们需要对队列中的最大值或是最小值进行操作时,使用单调队列会有奇效,相关的习题:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

        优先级队列相比较于普通队列来说,就是队中的每一个元素都有一个权值,权值最大的往往是先出队的,这跟入队顺序是无关!一般情况下按数值大小的确定权重分两种:数值越大权值越高为"大顶堆";数值越小权值越大为"小顶堆".c++中有现成的可以使用:priority_queue.默然情况下是"大顶堆"式的.(小顶堆底层是采用大于逻辑来实现的,而大顶堆是采用小于逻辑来实现的,两者不要搞混了!!!)相关例题有:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台.

        以上就是关于堆和栈的一些基本知识点,对于更深层次的知识点大家可以我所罗列的查找对应的详细知识点.BUG之路长夜漫漫,还望诸君为之共勉.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值