题目
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
思路
队列有两个操作,一个是在队尾添加数据,另一个是在头部取出数据,这两个操作分别用一个栈实现,即一个栈用来存数据,另一个栈用来取数据。
当读取数据时,如果读取的栈没有数据,就将存储数据的栈数据导入到读取数据的栈,这样读取的时间复杂度是O(n),写入的时间复杂度是O(1),空间复杂度是O(n)
go语言实现
type CQueue struct {
stackIn, stackOut *list.List
}
func Constructor() CQueue {
return CQueue{
stackIn: list.New(),
stackOut: list.New(),
}
}
func (this *CQueue) AppendTail(value int) {
this.stackIn.PushBack(value)
}
func (this *CQueue) DeleteHead() int {
if this.stackOut.Len() == 0 {
for this.stackIn.Len() > 0 {
this.stackOut.PushBack(this.stackIn.Remove(this.stackIn.Back()))
}
}
if this.stackOut.Len() != 0 {
return this.stackOut.Remove(this.stackOut.Back()).(int)
}
return -1
}