两个队列实现一个栈
思路:两个队列实现一个栈,使用了队列交换的思想。
代码如下:
type MyStack struct {
queue1, queue2 []int
}
//构造函数
func Constructor() (s MyStack) {
return
}
func (s *MyStack) Push(x int) {
s.queue2 = append(s.queue2, x)
for len(s.queue1) > 0 {
s.queue2 = append(s.queue2, s.queue1[0])
s.queue1 = s.queue1[1:]
}
s.queue1, s.queue2 = s.queue2, s.queue1
}
func (s *MyStack) Pop() int {
v := s.queue1[0]
s.queue1 = s.queue1[1:]
return v
}
func (s *MyStack) Top() int {
return s.queue1[0]
}
func (s *MyStack) Empty() bool {
return len(s.queue1) == 0
}
先将元素入对到 queue2,此时 queue1 为0,交换 queue2 和 queue1。此时 queue2 为0,queue1 中有1个元素。
再执行push操作时,len(queue1) > 0,此时再把 queue1 中的元素插入queue2 的尾部,然后将 queue2 和 queue1 进行交换。
此时相当于,插入 queue2 的两个元素的位置发生了交换并保存在 queue1中。最后将 queue1 中的元素出队,这样就可以保证后插入的元素先出。
不断执行 push 操作就行。
一个队列实现一个栈
思路:使用一个队列时,将当前插入元素前面的所有元素,先出队再入队即可。
代码如下:
type MyStack struct {
queue []int
}
func Constructor() (s MyStack) {
return
}
func (s *MyStack) Push(x int) {
n := len(s.queue)
s.queue = append(s.queue, x)
for ; n > 0; n-- {
s.queue = append(s.queue, s.queue[0])
s.queue = s.queue[1:]
}
}
func (s *MyStack) Pop() int {
v := s.queue[0]
s.queue = s.queue[1:]
return v
}
func (s *MyStack) Top() int {
return s.queue[0]
}
func (s *MyStack) Empty() bool {
return len(s.queue) == 0
}
每次执行 push 操作,如果queue存在元素,则将新插入元素前的所有元素出队,然后依次进队。这样新插入的元素就在队首了。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
计算机
+关注
关注
19文章
6651浏览量
84556 -
数据结构
+关注
关注
3文章
564浏览量
39900 -
队列
+关注
关注
1文章
46浏览量
10849
发布评论请先 登录
相关推荐
用两种方法解决电路设计问题
将200V的电压施加到500欧姆的抽头电阻器。找到连接到25V时需要0.1A电路的两个分接点之间的电阻。我用两种方法解决了这个问题。但正确的答案只能通过一种方法来
发表于 09-14 13:54
突发功率测量的两种方法
对于无线信号功率测试来说,TDMA信号、Bluetooth蓝牙信号或者雷达脉冲信号都是基于时域中周期性重复的突发结构来实现的。与连续平稳信号的功率测量不同,这种突发信号的功率测量受到频谱分析仪捕获时间的影响,相对来说比较复杂,突发功率测量主要有时域和频域积分方法
发表于 06-10 07:31
讨论Linux系统中设置开机自动运行的两种方法
有时可能会需要在重启时或者每次系统启动时运行某些命令或者脚本。我们要怎样做呢?本文中我们就对此进行讨论。 我们会用两种方法来描述如何在 CentOS/RHEL 以及 Ubuntu 系统上做到重启或者系统启动时执行命令和脚本。 两种方法都通过了测试。
发表于 07-09 06:38
pcb库封装常用的两种方法
识别模块通讯模块调试模块单片机模块PCB库——原理图库——原理图首先需要明白他们之间的关系画图的实质是什么pcb库封装常用的两种方法,简单实用原理图封装原理图的封装和pcb...
发表于 07-29 09:33
STM32操作矩阵键盘的两种方法
目录STM32操作矩阵键盘的两种方法——扫描和中断一、矩阵键盘的结构和原理二、扫描式矩阵键盘的原理和实现三、中断式矩阵键盘的原理和实现四、两种方案优劣STM32操作矩阵键盘的
发表于 08-12 06:33
在STM32上使用printf的两种方法 精选资料推荐
转载:https://blog.csdn.net/xyzjacky/article/details/103686717/在STM32上使用printf的两种方法xyzjacky 2019-12-24
发表于 08-23 09:08
浅析addContext()与addWebapp()这两种方法
addContext()与addWebapp()这两种方法都是向嵌入式tomcat添加web应用程序。addContext()需要配置相关所有内容,比如配置默认的Servlet,否则将无法访问静态
发表于 12-16 07:02
单片机控制IO空的两种方法
标题单片机控制IO空的两种方法(1或0看成高低电平可知总控制也可实现流水灯):运算符注意:&符号:0011100 1101010在一起看时,有0便是0.结果=0001000| 符号
发表于 01-07 08:12
单片机系统实现延时的两种方法解析
实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。
发表于 01-24 17:06
•1.3w次阅读
片机实现延时的两种方法
来源:大鱼机器人 第一篇 实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行
单片机实现延时两种方法
实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。▍1 、使用定时器/计数
发表于 11-04 15:36
•12次下载
两个栈实现一个队列方法
栈和队列是比较基础的数据结构。无论在工作中,还是在面试中,栈和队列都用的比较多。在计算机的世界,你会看到队列和栈,无处不在。 栈:一个先进后出的数据结构 队列:一个先进先出的数据结构
评论