当前位置:诺佳网 > 电子/半导体 > 可编程逻辑 >

两个栈实现一个队列方法

时间:2023-10-08 | 栏目:可编程逻辑 | 点击:

栈和队列是比较基础的数据结构。无论在工作中,还是在面试中,栈和队列都用的比较多。在计算机的世界,你会看到队列和栈,无处不在。

栈:一个先进后出的数据结构

队列:一个先进先出的数据结构

栈和队列这两种数据结构,同时也存在某种联系。用栈可以实现队列,用队列也可以实现栈。

两个栈实现一个队列

思路:让数据入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 中的栈顶元素保存,并弹栈。

您可能感兴趣的文章:

相关文章