Golang每日一练(leetDay0082) 用队列实现栈、用栈实现队列

目录

225. 用队列实现栈 Implement Stack Using Queues  🌟

232. 用栈实现队列 Implement Queue Using Stacks  🌟

🌟 每日一练刷题专栏 🌟

Rust每日一练 专栏

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


225. 用队列实现栈 Implement Stack Using Queues

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppop 和 empty)。

实现 MyStack 类:

  • void push(int x) 将元素 x 压入栈顶。
  • int pop() 移除并返回栈顶元素。
  • int top() 返回栈顶元素。
  • boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

注意:

  • 你只能使用队列的基本操作 —— 也就是 push to backpeek/pop from frontsize 和 is empty 这些操作。
  • 你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

示例:

输入:
["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 2, 2, false]解释:
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 返回 2
myStack.pop(); // 返回 2
myStack.empty(); // 返回 False

提示:

  • 1 <= x <= 9
  • 最多调用100 次 pushpoptop 和 empty
  • 每次调用 pop 和 top 都保证栈不为空

进阶:你能否仅用一个队列来实现栈。

代码:

package mainimport "fmt"type MyStack struct {que1, que2 []int
}/** Initialize your data structure here. */
func Constructor() MyStack {return MyStack{}
}/** Push element x onto stack. */
func (this *MyStack) Push(x int) {this.que2 = append(this.que2, x)for len(this.que1) > 0 {this.que2 = append(this.que2, this.que1[0])this.que1 = this.que1[1:]}this.que1, this.que2 = this.que2, this.que1
}/** Removes the element on top of the stack and returns that element. */
func (this *MyStack) Pop() int {x := this.que1[0]this.que1 = this.que1[1:]return x
}/** Get the top element. */
func (this *MyStack) Top() int {return this.que1[0]
}/** Returns whether the stack is empty. */
func (this *MyStack) Empty() bool {return len(this.que1) == 0
}func main() {myStack := Constructor()myStack.Push(1)myStack.Push(2)fmt.Println(myStack.Top())   // 输出2fmt.Println(myStack.Pop())   // 输出2fmt.Println(myStack.Empty()) // 输出false
}

输出:

2
2
false


232. 用栈实现队列 Implement Queue Using Stacks

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

实现 MyQueue 类:

  • void push(int x) 将元素 x 推到队列的末尾
  • int pop() 从队列的开头移除并返回元素
  • int peek() 返回队列开头的元素
  • boolean empty() 如果队列为空,返回 true ;否则,返回 false

说明:

  • 你 只能 使用标准的栈操作 —— 也就是只有 push to toppeek/pop from topsize, 和 is empty 操作是合法的。
  • 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。

示例:

输入:
["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] (leftmost is front of the queue)
myQueue.peek(); // return 1
myQueue.pop(); // return 1, queue is [2]
myQueue.empty(); // return false

提示:

  • 1 <= x <= 9
  • 最多调用 100 次 pushpoppeek 和 empty
  • 假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)

进阶:

  • 你能否实现每个操作均摊时间复杂度为 O(1) 的队列?换句话说,执行 n 个操作的总时间复杂度为 O(n) ,即使其中一个操作可能花费较长时间。

代码:

package mainimport "fmt"type MyQueue struct {inStack, outStack []int
}/** Initialize your data structure here. */
func Constructor() MyQueue {return MyQueue{}
}/** Push element x to the back of queue. */
func (this *MyQueue) Push(x int) {this.inStack = append(this.inStack, x)
}/** Removes the element from in front of queue and returns that element. */
func (this *MyQueue) Pop() int {this.move()x := this.outStack[len(this.outStack)-1]this.outStack = this.outStack[:len(this.outStack)-1]return x
}/** Get the front element. */
func (this *MyQueue) Peek() int {this.move()return this.outStack[len(this.outStack)-1]
}/** Returns whether the queue is empty. */
func (this *MyQueue) Empty() bool {return len(this.inStack) == 0 && len(this.outStack) == 0
}func (this *MyQueue) move() {if len(this.outStack) == 0 {for len(this.inStack) > 0 {this.outStack = append(this.outStack, this.inStack[len(this.inStack)-1])this.inStack = this.inStack[:len(this.inStack)-1]}}
}func main() {myQueue := Constructor()myQueue.Push(1)  // 队列变成[1]myQueue.Push(2)  // 队列变成[1, 2]fmt.Println(myQueue.Peek())  // 输出1fmt.Println(myQueue.Pop())  // 输出1,队列变成[2]fmt.Println(myQueue.Empty())  // 输出false
}

输出:

1
1
false


Stack和Queue

都是一种线性数据结构,其主要区别在于数据的操作方式。

Stack

是一种后进先出(Last In First Out,LIFO)的数据结构,即最后一个入栈的元素最先出栈,其操作包括压栈(push)和弹栈(pop)。

Queue

是一种先进先出(First In First Out,FIFO)的数据结构,即最先入队的元素最先出队,其操作包括入队(enqueue)和出队(dequeue)。

相同点

在于都可以使用数组或链表来实现,同时都是基于线性结构的数据类型。

不同点

在于其数据操作的方式不同,Stack的操作方式是LIFO,而Queue的操作方式是FIFO。

两种数据结构在不同的场景下有不同的应用,比如在计算机中的函数调用中常用Stack来实现函数调用栈,而在消息队列中则常用Queue来实现消息的异步处理。


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 

Rust每日一练 专栏

(2023.5.16~)更新中...

Golang每日一练 专栏

(2023.3.11~)更新中...

Python每日一练 专栏

(2023.2.18~2023.5.18)暂停更

C/C++每日一练 专栏

(2023.2.18~2023.5.18)暂停更

Java每日一练 专栏

(2023.3.11~2023.5.18)暂停更

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/255979.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

PS07海报截剪和切片(标尺使用),PS08图框工具(剪贴蒙版),PS09吸管工具组(颜色取样)

PS07海报截剪和切片&#xff08;标尺使用&#xff09; PS08图框工具&#xff08;剪贴蒙版&#xff09;PS09吸管工具组&#xff08;颜色取样&#xff09;

ps制作太极图

最终效果&#xff1a; 操作步骤&#xff1a; (1)、 新建文件-800*800px&#xff0c;打开标尺&#xff0c;新建参考线、得到中心点。 ctrlr 打开标尺&#xff0c; 学会 拉 标尺线&#xff0c; 拉出两条标尺线&#xff0c;让其水平、垂直相交。 (2)、 椭圆选框-以中心点绘制正圆…

用ps制作太极图

操作步骤&#xff1a; (1)、 新建文件-800*800px&#xff0c;打开标尺&#xff0c;新建参考线、得到中心点。 ctrlr 打开标尺&#xff0c; 学会 拉 标尺线&#xff0c; 拉出两条标尺线&#xff0c;让其水平、垂直相交。 (2)、 椭圆选框-以中心点绘制正圆&#xff08;按AltShi…

ps中怎样测量标尺线之间的距离及怎样切换距离单位

2019独角兽企业重金招聘Python工程师标准>>> 首先说一下&#xff0c;我用ps还不是很熟练&#xff0c;所以都是初级的问题&#xff0c;希望各位ps大神莫喷~~首先说一下怎么找到标尺呢&#xff1f;打开ps后&#xff0c;最上面有一个视图&#xff0c;点击后将标尺选项前…

前端ps基本操作

在还原设计时,我们需要使用 photoshop打开sd格式的设计,作为的工程师,我们不要太多的ps技巧,只需要了 一些简单的基本操作即可 1、alt 滚轮缩放放图片 2、空格鼠标左健拖动图片 3、shiftm切换选取工具,使用鼠标左键选择,ctrld可以取消选取 4、F8查看信息,可以查看选取内容的…

2.ps基本操作

提示&#xff1a;文章写完后&#xff0c;ps基本操作。 1、ps安装包 阿里云盘分享https://www.aliyundrive.com/s/XWxksTdanpW获取码&#xff1a;mp74 ps安装包 https://www.aliyundrive.com/s/XWxksTdanpW 提取码: mp74 点击链接保存&#xff0c;或者复制本段内容&#xff0c;打…

photoshop标尺工具_RulersGuides.js – Web上的Photoshop样式标尺和指南

关于Photoshop的最好的事情之一是其易于使用的指导线 &#xff0c;可以从标尺上拉出。 这些指南可以使放置物品和正确放置天平时的设计过程变得更加容易。 令我们非常高兴的是&#xff0c; 马克罗利奇 &#xff08; Mark Rolich &#xff09;实现了此特殊功能&#xff0c;以便…

chatgpt赋能python:Python中输入的全面介绍

Python中输入的全面介绍 在Python编程语言中&#xff0c;输入是指程序要求用户将内容输入到程序中进行处理。输入函数为input()&#xff0c;它允许用户直接在程序中输入数据。本文将全面介绍Python中输入的用法&#xff0c;包括如何使用input()函数、如何进行输入的类型转换以…

软件测试总结

软件生命周期(SDLC)的六个阶段 1、问题的定义及规划 此阶段是软件开发方与需求方共同讨论&#xff0c;主要确定软件的开发目标及其可行性。 2、需求分析 在确定软件开发可行的情况下&#xff0c;对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要…

pr片头、滚动与开放式字幕制作

pr字幕与滚动字幕制作&#xff1a; 片头字幕&#xff1a;点击文字工具&#xff08;Ctrl鼠标左键 打点&#xff09; 开放式字幕&#xff1a;新建序列-字幕 滚动字幕&#xff1a;旧版标题-滚动选项

ckeditor动态显示隐藏工具栏指定的按钮

客户说工具栏太复杂了&#xff0c;但是有时候又能用到&#xff0c;所以给了个需求&#xff0c;做一个按钮能实现显示或隐藏按钮 好吧&#xff0c;客户是上帝&#xff0c;开搞 思路&#xff1a;ckeditor添加一个自定义按钮&#xff0c;里面方法实现display&#xff1a;none样式…

金蝶服务器如何显示在任务栏,报表窗口看不见工具栏界面怎么办?

有的用户在打开金蝶KIS记账王会计报表后&#xff0c;竟然发现看不到保存、预览、打印等工具栏界面&#xff0c;这些工具与应用账簿报表数据息息相关&#xff0c;没有这些工具的话将大大想想使用效率。但是请放心&#xff0c;工具栏界面消失不是无法解决的棘手问题&#xff0c;下…

Linux(Ubuntu)菜单栏(工具栏)隐藏了,怎么显示出来

最近有捡起了LInux&#xff0c;换了新版本&#xff0c;有好多设置有点儿生疏 在使用的过程中&#xff0c;对一些比较典型的问题或者方法&#xff0c;进行一个总结&#xff0c;方便后面查看&#xff0c;也给各位道友一个参考。 其实这个问题也比较尴尬&#xff0c;如下图&…

计算机桌面工具栏,win7电脑计算机界面菜单工具栏不见了怎么办?

因为在咱们的windows系统中&#xff0c;具有很多的工具栏配置&#xff0c;咱们很多界面的窗口上方都有这样的一个工具栏&#xff0c;大家不妨随意的在自己的win7电脑中找到一个文件夹&#xff0c;之后咱们双击打开&#xff0c;在打开的文件夹窗口上方&#xff0c;咱们就可以看到…

word2007工具栏隐藏了怎样能一直显示?

1、首先在电脑中打开word文档&#xff0c;可以发现“功能区”被自动隐藏了&#xff0c;如下图所示。 2、这时需要点击左上角的开始选项卡&#xff0c;如下图所示。 3、然后在打开的开始菜单中&#xff0c;A下方的横杠&#xff0c;选择单击取消勾选“折叠功能区”。 4、这样“功…

easyUI dataGrid 隐藏分页工具栏 隐藏表头

一.方法1&#xff08;不推荐&#xff09; 适应以下需求&#xff1a; 1.当表格没有数据时&#xff0c;把datagrid隐藏;有数据的时候显示 2.表格不分页&#xff0c;无需显示分页栏 3.datagrid的高度由内容撑开&#xff08;固定高度&#xff0c;无数据时显示空白也可&#xff…

PowerDesigner工具栏消失恢复

PowerDesigner一键导入数据库所有表并画数据模型图 五分钟学会PowerDesigner创建概念数据模型 PowerDesigner设计的pdm模型导出超清图片 PowerDesigner工具栏消失恢复 目录 一、工具栏 二、点击工具-自定义菜单和工具栏 三、选择Palette即可 一、工具栏 不小心点到工具栏右上角…

html隐藏safari地址栏,怎么隐藏 iOS Safari 打开网页时的地址栏和工具栏探索

先来看一张截图 红色框处就是用手机浏览器打开页面时,自动显示出来的头部地址栏和底部工具栏 如果现在有一个需求,用手机浏览器打开页面时,把地址栏和工具栏隐藏,该怎么办呢? 起初我在度娘找到了好几篇博客都推荐如下方法 注:但使用该方法没有效果(可能该属性只针对 iOS …

excel工具栏隐藏了怎么办_excel隐藏的5个超级技巧,只有少数老师知道,你知道是哪几个吗?...

对于办公人员来说,excel的制作一定是少不了的,但大多数的人都只知道一些皮毛,很难深入的“吃透”excel,今天和大家聊聊这几个excel中隐藏的超级技巧,大多数人都不知道,但却超级实用,和易查分一起来看看吧! 隐藏网格线 对于excel来说,大多数人的印象里,这个工具只适用于表格的制…