队列实现栈
//用隊列實現棧
//使用2個隊列,使用了隊列交換的思想
type MyStack struct {
? ? queue1, queue2 []int
}
func Constructor() (s MyStack) {
? ? return
}
func (s *MyStack) Push(x int) {
? ?//將元素入隊到queue2
? ? 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
}
//使用一個隊列,將對頭的元素出隊后再入隊
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
}
鏈接:https://leetcode-cn.com/problems/implement-stack-using-queues/solution/yong-dui-lie-shi-xian-zhan-by-leetcode-solution/
?
總結