前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【一天一道Leetcode】用栈实现队列

【一天一道Leetcode】用栈实现队列

作者头像
潘永斌
发布2021-03-09 12:12:13
2500
发布2021-03-09 12:12:13
举报
文章被收录于专栏:看那个码农

01

题目描述:

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作

(push、pop、peek、empty):

代码语言:javascript
复制
实现 MyQueue 类:
void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false

示例如下:

代码语言:javascript
复制
输入:
["MyQueue", "push", "push", "peek", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 1, 1, false]

解释:
MyQueue myQueue = new MyQueue();
myQueue.push(1); // queue is: [1]
myQueue.push(2); // queue is: [1, 2] (最左边的数字在队列前面)
myQueue.peek(); // return 1
myQueue.pop(); // return 1, queue is [2]
myQueue.empty(); // return false

02

代码分析

由题目描述可知

栈和队列是两种基本的数据结构,同为容器类型。两者根本的区别在于:

栈stack:后进先出

队列queue:先进先出

由于此题要求

用两个先进后出的栈实现一个先进先出的队列

我们可以将

一个栈当作输入栈,用于压入push传入的数据;

另外一个栈做为输出栈用于pop和peek操作;

如下图所示,

向输入栈push元素1,即代表向队列从右到左输入1

向输入栈push元素2,即代表向队列从右到左输入2

每次需要执行pop或peek之前,输入栈需要向输出栈移入元素,根据栈先进后出的原则,输出栈最先进入栈的元素是2,最后进入栈的元素是1

执行peek操作时,需要返回队列开头的元素,即返回在输出栈最上面的元素1

执行pop操作时,需要先从队列移除开头元素,再返回队列剩下的元素,即输出栈上面的元素1出栈,也就是代表队列中开头元素1从左边出列,此时队列只剩下元素2

当执行empty操作时候,即判断输入栈和输出栈是否为空,若为空则返回true,如下所示,输入输出栈没有元素,则返回true

如下所示,输入输出栈还有元素2,则返回false

因此我们的代码为

代码语言:javascript
复制
class MyQueue(object):
    def __init__(self):
        self.stack1 = []
        self.stack2 = []

    def push(self, x):
        self.stack1.append(x)

    def pop(self):
        if not self.stack2:
            while self.stack1:
                self.stack2.append(self.stack1.pop())
        return self.stack2.pop()

    def peek(self):
        if not self.stack2:
            while self.stack1:
                self.stack2.append(self.stack1.pop())
        return self.stack2[-1]

    def empty(self):
        return not self.stack1 and not self.stack2
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 看那个码农 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 02
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档