大家在一开始接触数据结构的时候,应该就会学习过如何用栈来表示队列,方法很简单,两个栈的栈底相接,两个栈顶一个负责入队,一个负责出队。
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解题思路
在最开始说的很明白,利用数组实现栈。用一个栈做输入栈,一个做输出栈。
- 入队时,将元素压入输入栈。
- 出队时,判断输出栈是否为空,如不为空,则直接弹出顶元素;如为空,则将输入栈的元素逐个“倒入”输出栈中,并把最后一个元素弹出并出队。
// 将栈定义为[]interface{},具体方法不再具体实现
// 主要使用的是栈的Push(),Pop(),IsEmpty()方法
type Que struct {
in Stake
out Stake
}
func (q *Que) Push(value interface{}) {
q.in.Push(value)
}
func (q *Que) Pop() (interface{}, error) {
if q.IsEmpty() {
return nil, errors.New("Queue is empty.")
}
var value interface{}
if !q.out.IsEmpty() {
value, _ = q.out.Pop()
return value, nil
}
for !q.in.IsEmpty() {
value, _ = q.in.Pop()
q.out.Push(value)
}
value, _ = q.out.Pop()
return value, nil
}
利用栈实现队列是很容易的,只要逻辑理清即可。