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
每当遇到数字需要单独处理:有可能是多位数字