232、用栈实现队列 

为了让后入先出的栈实现先入先出的队列,需要两个栈,一个输入栈,一个输入栈

const MyArraySize = 1000

type MyStack struct {
	top  int
	data [MyArraySize]int
}

func (this *MyStack) Push(i int) bool {
	if this.top >= MyArraySize {
		return false
	}
	this.data[this.top] = i
	this.top ++
	return true
}
func (this *MyStack) Pop() (int, bool) {
	if this.top == 0 {
		return 0, false
	}
	this.top --
	n := this.data[this.top]
	return n, true
}
func (this *MyStack) Peek() int {
	if this.top == 0 {
		return -1
	}
	return this.data[this.top-1]
}

type MyQueue struct {
	input  *MyStack
	output *MyStack
}

/** Initialize your data structure here. */
func Constructor() MyQueue {
	return MyQueue{&MyStack{}, &MyStack{}}
}

/** Push element x to the back of queue. */
func (this *MyQueue) Push(x int) {
	this.input.Push(x)

}

/** Removes the element from in front of queue and returns that element. */
func (this *MyQueue) Pop() int {
	if this.output.top == 0 {
		this.swap()
	}
	n, _ := this.output.Pop()
	return n
}
func (this *MyQueue) swap()  {
	for {
		i, ok := this.input.Pop()
		if !ok {
			break
		}
		this.output.Push(i)
	}
}
/** Get the front element. */
func (this *MyQueue) Peek() int {
	if this.output.top == 0 {
		this.swap()
	}
	return this.output.Peek()
}

/** Returns whether the queue is empty. */
func (this *MyQueue) Empty() bool {
	if this.input.top == 0 && this.output.top == 0 {
		return true
	}
	return false
}

?Q:对于mystack的pop操作如果没有值不应该返回空吗,为什么是0

而且对于出栈后,这个位置的元素需不需要清空,为啥结果一样,清空为nil不行,0的话不就白占数字

为什么栈不用初始化但是队列要

394、字符串解码 

用栈:1.linkedlist或者stack

每当遇到数字需要单独处理:有可能是多位数字