栈和队列是比较基础的数据结构。无论在工作中,还是在面试中,栈和队列都用的比较多。在计算机的世界,你会看到队列和栈,无处不在。
栈:一个先进后出的数据结构
队列:一个先进先出的数据结构
栈和队列这两种数据结构,同时也存在某种联系。用栈可以实现队列,用队列也可以实现栈。
两个栈实现一个队列
思路:让数据入stack1,然后栈stack1中的数据出栈并入到栈stack2,然后出stack2。
代码如下:
type CQueue struct {
stack1, stack2 *list.List
}
//构造函数
func Constructor() CQueue {
return CQueue{
stack1: list.New(),
stack2: list.New(),
}
}
//尾部插入
func (this *CQueue) AppendTail(value int) {
this.stack1.PushBack(value)
}
//头部删除,back函数返回其list最尾部的值
func (this *CQueue) DeleteHead() int {
//如果第二个栈为空
if this.stack2.Len() == 0 {
for this.stack1.Len() > 0 {
this.stack2.PushBack(this.stack1.Remove(this.stack1.Back()))
}
}
if this.stack2.Len() != 0 {
e := this.stack2.Back()
this.stack2.Remove(e)
return e.Value.(int)
}
return -1
}
先调用 AppendTail 函数将所有元素插入 stack1,在调用 DeleteHead 函数将 stack1 中的元素转移到 stack2 中,再将元素再出栈。
再调用 DeleteHead 时,先判断 statck2 是否为空,为空则将 stack1 元素移动到 stack2 中,然后将 stack2 中的栈顶元素保存,并弹栈。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
数据
+关注
关注
8文章
6512浏览量
87601 -
函数
+关注
关注
3文章
3881浏览量
61310 -
队列
+关注
关注
1文章
46浏览量
10849
发布评论请先 登录
相关推荐
怎么用一个布尔按钮,同时停止两个while循环
大家好,如图,我需要的是读出下面那个循环里面不同事件长设定的数值,因为while循环不能跳出值,所以用了队列,但是问题是,按下这个确认键,程序就锁死了,呈现死循环了。我想问一下大家怎么才能实现用
发表于 05-24 10:43
有什么方法能够在lineout跟headphone两个输出通道实现不同信号的输出?
我现在需要输出两个不同的信号,我一直用aic23的命令:while (!DSK6713_AIC23_write(hCodec, x[sample])) 来实现输出,不过lineout跟
发表于 08-15 10:16
怎么实现一个同步FIFO 2点有两个输出eindpoints和两个端点?
你好我想实现一个同步FIFO 2点有两个输出eindpoints和两个端点,我创造的这些enpoints描述符中并创建为每个端点的DMA通道
发表于 09-20 14:06
将两个.hex文件合成一个的方法
我们在写程序的时候,有时候有两个可执行文件的时候,都想使用里面的功能,但是源文件融合起来又感觉麻烦,这时候就要想到把两个.hex文件合成一个,也是可以使用的。提示:在合并前,
发表于 01-27 08:21
如何实现两个蓝牙模块的配对
以上两个是HC-05相信各位小伙伴都对蓝牙互相传输数据的AT指令编写感到麻烦吧,用下面图片的软件轻松可以解决问题,实现蓝牙间数据的传输。在使用这个软件之前HC-05要进入AT模式,就是在EN这个引脚
发表于 03-02 07:29
浅析RT-Thread与FreeRTOS两个系统的实现差异
freertos的代码,先看朱大神的freertos基础篇和高级篇的详细介绍,然后啃源码;搞懂了基本的设计思想和代码的实现逻辑。下面简单列一下自己了解到的两个系统的实现差异。
发表于 05-25 15:47
RTThread与FreeRTOS两个系统的实现差异
freertos的代码,先看朱大神的freertos基础篇和高级篇的详细介绍,然后啃源码;搞懂了基本的设计思想和代码的实现逻辑。下面简单列一下自己了解到的两个系统的实现差异。
发表于 09-26 18:03
评论