打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
用两个栈实现一个队列

1 问题

用两个栈实队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回)

2 方法

定义两个栈stackln和 stackOut:前者对应上面分析的第一个栈,只用于尾部插入;后者对应第二个栈,只用于头部删除。
尾部插入:无脑压入新数字到 stackln
头部删除:
如果stackOut不是空,弹出栈顶;如果stackOut是空,分为两种情况:
如果stackln也是空,代表队列为空,返回-1;否则就将 stackln的数字倒入
stackOut 中,再弹出栈顶。

代码清单 1

class CQueue:
def _init_(self):
# 存较新的尾部插入数字
self.stackIn =[]
# 存较老的逆序数字
self.stackOut = []
def appendTail(self, value: int) -> None
# 直接压入stackIn
self.stackIn.append(value)
def deleteHead(self) -> int:
if self.stackout:
# stackOut还有数字,直接pop
return self.stackout.pop()
if not self.stackIn:
# stackIn也没有数字,队列为空
return -1
while self.stackIn:
# 将stackIn的数字倒序导入stackout中
self.stack0ut.append(self.stackIr
# 弹出stackout
return self.stackout.pop()

3 结语

针对用两个栈实现队列的问题,提出运用两个栈的方法,第一个栈只用于尾部插入,第二个栈只用于头部删除。在需要删除队列头时,如果第二个栈中还有数字,就把其栈顶弹出即可,否则就把第一个栈的所有数字都逆序导入第二个栈中,然后再弹出第二个栈的栈顶。如果两个栈都没有数字,就返回-1。通过本次实验,证明该方法是有效的。此方法还略微有些不足,希望以后能运用更好的方法来实现。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
416,剑指 Offer-用两个栈实现队列
《从队列到数字团队》
将数字转换为序数
【Python学习之旅】---多线程爬取段子
python queue模块 消息队列
汽车尾标的意思你真的知道吗?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服