0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

队列实现栈原理是什么?队列实现栈方案有哪几种?

Android编程精选 来源:编程学习总站 作者:写代码的牛顿 2021-07-04 13:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1、队列实现栈原理简述

栈是一种后进先出的数据结构,而队列是一种先进先出的数据结构,两者原理不难理解,使用也简单。但是我们不仅仅要掌握数据结构的基本原理,还要学会灵活运用,能否灵活运用是考察一个人对数据结构的理解程度,也是在面试的时候经常会考到的知识点。现在假设面试官要求你用队列实现栈,你的解决方案是什么?通过栈的基本原理我们知道,只要每次进行stack_pop操作时将队列里最后一个元素输出就能模拟栈的输出操作。

2、队列实现栈方案和实现

方案1:

我们很容易想到一种解决方案,队列queue1保存原始输入数据,队列queue2作为临时队列缓存数据,只要进行stack_pop操作时,先将queue1里除最后一个元素外全部出队,且出队的数据保存在一个临时队列queue2里,保存queue1最后的元素,最后再将queue2里的全部元素出队,且出队的元素重新放进queue1里,返回保存的queue1最后的元素。

我们作了下图便于理解2个队列模拟栈的过程。

一个栈输出元素顺序

pYYBAGDhSEyAdw4iAAASk34tfNs779.jpg

两个队列queue1和queue2模拟栈

poYBAGDhSFSAD2xuAABApH0Njto619.jpg

在数据结构与算法篇-队列和数据结构与算法篇-栈文章里我们详细介绍了队列和栈的原理,并都用C实现了队列和栈。现在我们复用这两篇文章里队列的实现代码,用于实现栈。定义栈相关数据结构和操作函数代码如下:

poYBAGDhSF6AElBAAAB5DbpRGCo582.jpg

栈初始化函数实现:

poYBAGDhSGuATGupAABDbwkUz54998.jpg

栈销毁函数实现:

pYYBAGDhSHeACJ0jAAA5-j_6l6c146.jpg

入栈函数实现:

poYBAGDhSICAXrdRAAAxX-RjUj8740.jpg

出栈函数实现:

pYYBAGDhSIqASGSQAAB8F1Mp3es586.jpg

判断栈是否空和是否满函数实现:

poYBAGDhSJyAIFsaAABW1UkhDxU770.jpg

从方案1我们知道每次出队都需要将队列里除最后一个元素外的元素保存在另外一个临时队列里,增加了空间复杂度。那么能否只用一个队列能否模拟栈呢?通过仔细观察方案1发现queue1出对的数据是可以重新再入队的,只要让队列里最后一个元素在队列头即可,那么我们很容易想到方案2。 方案2: 将队列queue1里的数据依次出队,且出队的数据重新放在queue1的队尾,直到最后一个元素在队列头,最后输出队列头的元素即可。整个过程我们可以用下图表示。单个队列模拟栈

poYBAGDhSKaAeLi6AAA3CEypaKE570.jpg

单个队列模拟出栈函数实现如下:

pYYBAGDhSLCAVo4rAABl3JgrwOM365.jpg

栈实现验证

下面我们写一个小程序验栈实现的正确性。

poYBAGDhSLqAf1UWAADbnrJOENY998.jpg

编译运行输出如下:

pYYBAGDhSMSAJ1tIAAAysSP7yQc495.jpg

队列模拟栈完全正确。

责任编辑:lq6

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4761

    浏览量

    97167
  • 数据结构
    +关注

    关注

    3

    文章

    573

    浏览量

    41379
  • 元素
    +关注

    关注

    0

    文章

    47

    浏览量

    8723

原文标题:数据结构与算法篇-队列实现栈

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    NVMe高速传输之摆脱XDMA设计54:如何测试队列管理功能2

    , 表示操作顺序错误; 创建 I/O 完成队列和提交队列后, 先删除完成队列, 返回错误值为 8, 表示操作顺序错误。 打印信息显示测试结果与预期设计功能一致, 成功执行了队列的创建和
    发表于 12-10 08:33

    优先级队列介绍

    队列(Queue)的知识点:「概念」:队列是一种先进先出(FIFO)的数据结构,类似于排队的概念。「基本操作」:enqueue(item): 将元素添加到队列的末尾。dequeue(): 从
    发表于 11-26 07:56

    基于环形队列的UART收发回显实验

    问题。在本实验中,我们使用环形队列实现实验1的串口收发回显,将串口接收到的数据暂存在队列中,待完成一次接收后再将队列中的数据全部发出去。
    的头像 发表于 10-27 13:51 1711次阅读
    基于环形<b class='flag-5'>队列</b>的UART收发回显实验

    自动驾驶中常提的“全”是个啥?必要“全”吗?

    [首发于智驾最前沿微信公众号]随着自动驾驶技术落地,越来越多车企公布了自己的自动驾驶方案,在很多车企的宣传中,会使用“全自研”的说法来证明自己的实力。所谓“全”,字面意思是全套技术
    的头像 发表于 08-27 09:43 672次阅读
    自动驾驶中常提的“全<b class='flag-5'>栈</b>”是个啥?<b class='flag-5'>有</b>必要“全<b class='flag-5'>栈</b>”吗?

    NVMe IP高速传输却不依赖XDMA设计之九:队列管理模块(上)

    这是采用PCIe设计NVMe,并非调用XDMA方式,后者在PCIe4.0时不大方便,故团队直接采用PCIe设计,结合UVM验证加快设计速度。 队列管理模块采用队列的存储与控制分离的设计结构。
    的头像 发表于 08-04 09:53 603次阅读
    NVMe IP高速传输却不依赖XDMA设计之九:<b class='flag-5'>队列</b>管理模块(上)

    NVMe高速传输之摆脱XDMA设计十:队列管理模块设计(下)

    数量的2倍,要保证仲裁效率和良好的时序,只能降低提交队列数量,导致性能下降。而完成队列管理单元所实现的结构只占用两个仲裁请求输入,基于此可以增加更多的I/O提交队列,充分发挥SSD性能
    发表于 07-30 16:27

    NVMe高速传输之摆脱XDMA设计九:队列管理模块设计(上)

    条目,一个提交队列管理单元用于实现提交队列存储地址空间的管理和门铃控制。在提交队列管理单元中,构建一个admin提交队列表单和N个I/O提交
    发表于 07-27 17:41

    RabbitMQ消息队列解决方案

    在现代分布式系统架构中,消息队列作为核心组件,承担着系统解耦、异步处理、流量削峰等重要职责。RabbitMQ作为一款成熟的消息队列中间件,以其高可用性、高可靠性和丰富的特性,成为众多企业的首选方案。本文将从运维工程师的角度,详细
    的头像 发表于 07-08 15:55 439次阅读

    NVME控制器之队列管理模块

    如图1所示。 图1 队列管理模块框图 在NVMe协议中,使用队列来传输、缓存和处理命令条目,以实现Host端和NVMe SSD端之间的通信。在CPU上运行NVMe软件协议,其Ho
    发表于 05-03 20:19

    NVME控制器之队列管理模块

    队列管理模块是整个NVMe Host控制器的核心模块,该模块实现了提交队列与完成队列的管理,多队列请求的仲裁判决等功能。
    的头像 发表于 05-03 15:32 429次阅读
    NVME控制器之<b class='flag-5'>队列</b>管理模块

    深入浅出解析低功耗蓝牙协议

    协议的实现代码称为协议(protocol stack),Bluetooth LE协议就是实现低功耗蓝牙协议的代码,理解和掌握Bluetooth LE协议是
    的头像 发表于 04-09 14:49 1016次阅读
    深入浅出解析低功耗蓝牙协议<b class='flag-5'>栈</b>

    三种蓝牙架构实现方案(蓝牙协议方案

    蓝牙架构实现方案哪几种?我们一般把整个蓝牙实现方案叫做蓝牙协议
    的头像 发表于 04-08 15:35 1215次阅读
    三种蓝牙架构<b class='flag-5'>实现</b><b class='flag-5'>方案</b>(蓝牙协议<b class='flag-5'>栈</b><b class='flag-5'>方案</b>)

    分布式存储哪几种类型?

    分布式存储哪几种类型?分布式存储系统是一种将数据分散存储在多台独立节点上的技术,根据数据模型可分为键值存储、列式存储、文档存储和图形存储等类型;按数据存储单位可分为基于文件、块和对象的存储;按
    的头像 发表于 02-20 11:00 1131次阅读

    常见的有源变压器哪几种

    麻烦问一下大家,我们常见的有源变压器哪几种?最关键的问题是,有源变压器和无源变压器建模方法相同吗?有源变压器如何进行建模?真心求教,在线等,谢谢了。
    发表于 01-22 07:47

    曙光云开启全智能时代

    近日,“全可信 云中生智”曙光云战略发布会召开。曙光云从首创“城市云”进化到实现“全智能云”,打造“云智、云安、云算、云数”四位一体能力体系,深度赋能千行百业数智化转型升级。
    的头像 发表于 12-19 15:11 915次阅读