两个队列实现一个栈
思路:两个队列实现一个栈,使用了队列交换的思想。
代码如下:
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文章
7553浏览量
88798 -
数据结构
+关注
关注
3文章
573浏览量
40250 -
队列
+关注
关注
1文章
46浏览量
10932
发布评论请先 登录
相关推荐
用两种方法解决电路设计问题
将200V的电压施加到500欧姆的抽头电阻器。找到连接到25V时需要0.1A电路的两个分接点之间的电阻。我用两种方法解决了这个问题。但正确的答案只能通过一种方法来
发表于 09-14 13:54
STM32操作矩阵键盘的两种方法
目录STM32操作矩阵键盘的两种方法——扫描和中断一、矩阵键盘的结构和原理二、扫描式矩阵键盘的原理和实现三、中断式矩阵键盘的原理和实现四、两种方案优劣STM32操作矩阵键盘的
发表于 08-12 06:33
创建主/从SPI接口的两种方法详谈
的文章,在此分享。 当我们在设计中使用Zynq SoC或Zynq UltraScale + MPSoC时,可以有两种方法来实现SPI接口: 1. 使用PS端的SPI控制器(PS端有两个SPI控制器
发表于 12-30 05:03
•6535次阅读
![创建主/从SPI接口的<b class='flag-5'>两种方法</b>详谈](https://file1.elecfans.com//web2/M00/A7/1F/wKgZomUMQoOALyKzAAAwextuNmY284.png)
使用jdbc连接上oracle的两种方法
本文主要介绍了使用jdbc连接上oracle的两种方法:1、 使用thin连接,2、 使用oci连接(Oracle Call Interface)
发表于 02-06 10:43
•1743次阅读
你还会手写栈和队列吗栈和队列的基本实现程序说明
昨天跟一个CSDN上的朋友聊天,他说现在如果让他自己手写一个栈或者队列,估计都要写蛮久的,平时虽然都在用,但是都是别人封装好的集合。确实,经典的数据结构,包括排序算法,虽然我们平时不用手写了,但是
单片机系统实现延时的两种方法解析
实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。
发表于 01-24 17:06
•1.4w次阅读
![单片机系统<b class='flag-5'>实现</b>延时的<b class='flag-5'>两种方法</b>解析](https://file.elecfans.com/web1/M00/B2/45/pIYBAF4FyXiADHT6AAGa7xHnJuw563.png)
片机实现延时的两种方法
来源:大鱼机器人 第一篇 实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行
单片机实现延时两种方法
实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。▍1 、使用定时器/计数
发表于 11-04 15:36
•12次下载
![单片机<b class='flag-5'>实现</b>延时<b class='flag-5'>两种方法</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32操作矩阵键盘的两种方法——扫描和中断
目录STM32操作矩阵键盘的两种方法——扫描和中断一、矩阵键盘的结构和原理二、扫描式矩阵键盘的原理和实现三、中断式矩阵键盘的原理和实现四、两种方案优劣STM32操作矩阵键盘的
发表于 11-26 13:36
•36次下载
![STM32操作矩阵键盘的<b class='flag-5'>两种方法</b>——扫描和中断](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
简述安装打印机驱动的两种方法
安装打印机驱动通常有两种方法,一种是直接使用驱动文件自带的安装程序自动安装,而另一种方法就是我们自己手动进行安装。两种方法各有利弊,日常工作中可以根据实际情况来选择使用哪种方法进行安装
![简述安装打印机驱动的<b class='flag-5'>两种方法</b>](https://file1.elecfans.com/web2/M00/81/F8/wKgaomQrgSqAXfVkAAEmFiRWCcw273.jpg)
评论