ATMEGA系列ATMEL芯片-亿配芯城-两个栈实现一个队列方法
你的位置:ATMEGA系列ATMEL芯片-亿配芯城 > 芯片资讯 > 两个栈实现一个队列方法
两个栈实现一个队列方法
发布日期:2023-12-31 12:44     点击次数:200

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

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

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

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

两个栈实现一个队列

思路:让数据入stack1, 电子元器件PDF资料大全然后栈stack1中的数据出栈并入到栈stack2, ATMEGA系列ATMEL芯片COM然后出stack2。

代码如下:

type CQueue struct {
    stack1,
芯片交易网IC交易网 stack2 *list.List
}

//构造函数    
func Constructor() CQueue {
        return CQueue{
        stack1: list.New(),CMOS图像传感器集成电路芯片ATMEGA系列-ATMEL芯片
        stack2: list.New(),
EEPROM带电可擦可编程存储器芯片大全
    }
}
    
//尾部插入
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 中的栈顶元素保存,并弹栈。