栈和队列理论基础
- 队列是先进先出,栈是先进后出
LeetCode题目
232.用栈实现队列
题目链接:Implement Queue using Stacks - LeetCode
代码如下:
type MyStack []int
func (s *MyStack) Push(v int) {
*s = append(*s, v)
}
func (s *MyStack) Pop() int {
val := (*s)[len(*s)-1]
*s = (*s)[:len(*s)-1]
return val
}
func (s *MyStack) Peek() int {
return (*s)[len(*s)-1]
}
func (s *MyStack) Size() int {
return len(*s)
}
func (s *MyStack) Empty() bool {
return s.Size() == 0
}
type MyQueue struct {
stackIn *MyStack
stackOut *MyStack
}
func Constructor() MyQueue {
return MyQueue{
stackIn: &MyStack{},
stackOut: &MyStack{},
}
}
func (this *MyQueue) fillStackOut() {
if this.stackOut.Empty() {
for !this.stackIn.Empty() {
val := this.stackIn.Pop()
this.stackOut.Push(val)
}
}
}
func (this *MyQueue) Push(x int) {
this.stackIn.Push(x)
}
func (this *MyQueue) Pop() int {
this.fillStackOut()
return this.stackOut.Pop()
}
func (this *MyQueue) Peek() int {
this.fillStackOut()
return this.stackOut.Peek()
}
func (this *MyQueue) Empty() bool {
return this.stackIn.Empty() && this.stackOut.Empty()
}
225.用队列实现栈
题目链接:Implement Stack using Queues - LeetCode
代码如下:
type MyStack struct {
queue1 []int
queue2 []int
}
func Constructor() MyStack {
return MyStack{
queue1: make([]int, 0),
queue2: make([]int, 0),
}
}
func (this *MyStack) Move() {
if len(this.queue1) == 0 {
this.queue1, this.queue2 = this.queue2, this.queue1
} else {
this.queue2 = append(this.queue2, this.queue1[0])
this.queue1 = this.queue1[1:]
this.Move()
}
}
func (this *MyStack) Push(x int) {
this.queue2 = append(this.queue2, x)
this.Move()
}
func (this *MyStack) Pop() int {
val := this.queue1[0]
this.queue1 = this.queue1[1:]
return val
}
func (this *MyStack) Top() int {
return this.queue1[0]
}
func (this *MyStack) Empty() bool {
return len(this.queue1) == 0
}