可以使用 slice 实现如下:
type Stack [] int
func (s Stack) Empty() bool{return len(s) == 0}
func (s *Stack) Push(v int) {
*s = append(*s, v)
}
func (s *Stack)Pop() int {
v := (*s)[len(*s) - 1]
*s = (*s)[:len(*s) -1 ]
return v
}
type Queue []int
func (q Queue) Empty() bool {
return len(q) == 0
}
func (q *Queue) Enqueue(v int) {
*q = append(*q, v)
}
func (q *Queue) Dequeue() int {
v := (*q)[0]
*q = (*q)[1:len(*q)]
return v
}
上面的写法是正确的,但是不是最优的。
可以思考下,使用一个值来计数,标识Stack栈顶的位置,而不需要大量的内存变动。同样,也可以用Go的标准库 container/list 来实现