搜索
首页后端开发Python教程使用堆栈实现队列

使用堆栈实现队列

Nov 27, 2024 pm 10:41 PM

队列和堆栈是我们在日常编码中使用的相当简单的数据结构。事实上,它们可以被认为是维护数据最简单的结构。

在整篇文章中,我将使用 DS 来指代数据结构。

Queue是一个按照先进先出原则工作的DS。先来的数据被允许先出去。实现队列的方法有很多种。我们可以自由地使用数组、链表等。但在这里,我将讨论使用另一个称为 Stack 的 DS 来实现 Queue。

现在,我们都知道,Stack 是一个按照 LIFO 原理工作的 DS。我总是考虑把书一本一本地堆放在另一本上面,所以如果它可以帮助你想象的话,请随意使用这个类比。

我在 hackerrank 中遇到了这个问题,他们要求我们使用 2 个堆栈来实现队列。听起来很简单吧?花点时间思考一下我们如何才能实现这一目标。

您可能已经想出了一些解决方案,因为有很多方法可以做到这一点。那你为什么不直接尝试一下呢?

问题

现在,对于那些尝试过并遇到“超时错误”的人和那些懒得尝试的人,让我向您解释解决此问题的最简单、最简单的解决方案。

首先看一下stack是如何实现的。

Implementing Queue using Stack

如你所见,我使用列表实现了堆栈。最初,构造函数初始化一个空列表。我们通过将数据附加到列表末尾来推送数据。弹出时,如果我们不提供索引,它将从列表末尾弹出。因此,最后插入的元素是第一个弹出的。

现在,以与队列类似的方式,我们已经初始化了两个不同的堆栈。一种用于入队,一种用于出队。

我们使用类似于堆栈的enqueueStack,只是将数据推送到列表末尾。但是对于 dequeueStack,我们知道堆栈的 pop 函数会从最后一个元素中删除元素,所以我们要做的是;我们反转enqueueStack并将其放入dequeueStack中。因此,enqueueStack的第一个元素成为dequeueStack的最后一个元素,enqueueStack的第二个元素成为dequeueStack的倒数第二个元素,依此类推。所以现在如果我们对 dequeueStack 使用 pop 函数,那么它将删除我们推送的第一个元素,从而模仿队列。

如果现在这听起来令人困惑,请不要担心!一旦你看到代码,你就会明白我在说什么。事实上现在就看看吧!

Implementing Queue using Stack

您可能想知道这些额外检查的用途是什么。就像检查 dequeueStack 是否为空一样。如果我们最初不检查它。 enqueueStack 的元素通过反转将进入 dequeueStack,发生的情况是原本应该位于第一个的出队 Stacks 元素现在最终成为最后一个。因此,首先必须清空 dequeueStack,如代码所示。

与此类似,printFront 打印应该位于队列前面的项目。

在此实现之后,我们从 STDIN 读取输入并将输出打印到 STDOUT。

我们的输入有点像这样:

Implementing Queue using Stack

完整的主要功能是:

Implementing Queue using Stack

我尝试以尽可能简单的方式实现这一点。可能还有其他几种更好的方法来实现这一点。这里展示其中之一!

以上是使用堆栈实现队列的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Python的混合方法:编译和解释合并Python的混合方法:编译和解释合并May 08, 2025 am 12:16 AM

pythonuseshybridapprace,ComminingCompilationTobyTecoDeAndInterpretation.1)codeiscompiledtoplatform-Indepententbybytecode.2)bytecodeisisterpretedbybythepbybythepythonvirtualmachine,增强效率和通用性。

了解python的' for”和' then”循环之间的差异了解python的' for”和' then”循环之间的差异May 08, 2025 am 12:11 AM

theKeyDifferencesBetnewpython's“ for”和“ for”和“ loopsare:1)” for“ loopsareIdealForiteringSequenceSquencesSorkNowniterations,而2)”,而“ loopsareBetterforConterContinuingUntilacTientInditionIntionismetismetistismetistwithOutpredefinedInedIterations.un

Python串联列表与重复Python串联列表与重复May 08, 2025 am 12:09 AM

在Python中,可以通过多种方法连接列表并管理重复元素:1)使用 运算符或extend()方法可以保留所有重复元素;2)转换为集合再转回列表可以去除所有重复元素,但会丢失原有顺序;3)使用循环或列表推导式结合集合可以去除重复元素并保持原有顺序。

Python列表串联性能:速度比较Python列表串联性能:速度比较May 08, 2025 am 12:09 AM

fasteStmethodMethodMethodConcatenationInpythondependersonListsize:1)forsmalllists,operatorseffited.2)forlargerlists,list.extend.extend()orlistComprechensionfaster,withextendEffaster,withExtendEffers,withextend()withextend()是extextend()asmoremory-ememory-emmoremory-emmoremory-emmodifyinginglistsin-place-place-place。

您如何将元素插入python列表中?您如何将元素插入python列表中?May 08, 2025 am 12:07 AM

toInSerteLementIntoApythonList,useAppend()toaddtotheend,insert()foreSpificPosition,andextend()formultiplelements.1)useappend()foraddingsingleitemstotheend.2)useAddingsingLeitemStotheend.2)useeapecificindex,toadapecificindex,toadaSpecificIndex,toadaSpecificIndex,blyit'ssssssslorist.3 toaddextext.3

Python是否列表动态阵列或引擎盖下的链接列表?Python是否列表动态阵列或引擎盖下的链接列表?May 07, 2025 am 12:16 AM

pythonlistsareimplementedasdynamicarrays,notlinkedlists.1)他们areStoredIncoNtiguulMemoryBlocks,mayrequireRealLealLocationWhenAppendingItems,EmpactingPerformance.2)LinkesedlistSwoldOfferefeRefeRefeRefeRefficeInsertions/DeletionsButslowerIndexeDexedAccess,Lestpypytypypytypypytypy

如何从python列表中删除元素?如何从python列表中删除元素?May 07, 2025 am 12:15 AM

pythonoffersFourmainMethodStoreMoveElement Fromalist:1)删除(值)emovesthefirstoccurrenceofavalue,2)pop(index)emovesanderturnsanelementataSpecifiedIndex,3)delstatementremoveselemsbybybyselementbybyindexorslicebybyindexorslice,and 4)

试图运行脚本时,应该检查是否会遇到'权限拒绝”错误?试图运行脚本时,应该检查是否会遇到'权限拒绝”错误?May 07, 2025 am 12:12 AM

toresolvea“ dermissionded”错误Whenrunningascript,跟随台词:1)CheckAndAdjustTheScript'Spermissions ofchmod xmyscript.shtomakeitexecutable.2)nesureThEseRethEserethescriptistriptocriptibationalocatiforecationAdirectorywherewhereyOuhaveWritePerMissionsyOuhaveWritePermissionsyYouHaveWritePermissions,susteSyAsyOURHomeRecretectory。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。