用队列实现栈的两种方法

两个队列实现一个栈思路:两个队列实现一个栈,使用了队列交换的思想。
代码如下:
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存在元素,则将新插入元素前的所有元素出队,然后依次进队。这样新插入的元素就在队首了。

Trinamic推PD42-3-1241和模块TMCM-1241,面向5000rpm的高速定位步进电机应用
电缆无故进水怎么办,有什么推荐的解决方法
爱立信传承无线产品设计理念打造高性能LTE网络
低压配电系统IT、TT和TN接地方式的详细图文详解分析
四个步骤就教你如何判断网络故障点
用队列实现栈的两种方法
又见现货:小米之家开卖,小米note2、红米note4X先到先得!
灯具产品辐射骚扰测试整改及建议
NTC热敏电阻的材料及应用
非授权频谱网络是创新的关键原因
AI辅助制芯技术,将计算光刻提速40倍
精进电动深耕商用车市场,获大众商用车批量订单
口罩呼吸阻力检测仪的技术指标都有哪些
发射天线的制作,tranmission antenna
乐视在汽车领域到底创造了什么?
香蕉派(Banana Pi)社区东莞松山湖创新研发中心与比派科技总部办公室正式投入使用
芯片技术较量进入白热化 IC解密探索尖端技术
落地产教融合 中关村芯学院塑造IC人才培育新机制
vivo正式推出旗下首款平板电脑
618增速3年来最低,积木易搭元宇宙沉浸式营销解决方案助力破解低欲望消费僵局