电子元器件PDF资料大全-亿配芯城-用队列实现栈的两种方法
你的位置:电子元器件PDF资料大全-亿配芯城 > 芯片资讯 > 用队列实现栈的两种方法
用队列实现栈的两种方法
发布日期:2023-12-31 11:36     点击次数:92
两个队列实现一个栈

思路:两个队列实现一个栈,使用了队列交换的思想。

代码如下:

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, 电子元器件PDF资料大全交换 queue2 和 queue1。此时 queue2 为0,芯片交易网IC交易网queue1 中有1个元素。

再执行push操作时, ATMEGA系列ATMEL芯片COMlen(queue1) > 0, CMOS图像传感器集成电路芯片此时再把 queue1 中的元素插入queue2 的尾部, EEPROM带电可擦可编程存储器芯片大全电子元器件PDF资料大全然后将 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存在元素,则将新插入元素前的所有元素出队,然后依次进队。这样新插入的元素就在队首了。