栈和队列是比较基础的数据结构。无论在工作中,还是在面试中,栈和队列都用的比较多。在计算机的世界,你会看到队列和栈,无处不在。
栈:一个先进后出的数据结构
队列:一个先进先出的数据结构
栈和队列这两种数据结构,同时也存在某种联系。用栈可以实现队列,用队列也可以实现栈。
思路:让数据入stack1,然后栈stack1中的数据出栈并入到栈stack2,然后出stack2。
代码如下:
type CQueue struct {
stack1, stack2 *list.List
}
//构造函数
func Constructor() CQueue {
return CQueue{
stack1: list.New(),
stack2: list.New(),
}
}
//尾部插入
func (this *CQueue) AppendTail(value int) {
this.stack1.PushBack(value)
}
//头部删除,back函数返回其list最尾部的值
func (this *CQueue) DeleteHead() int {
//如果第二个栈为空
if this.stack2.Len() == 0 {
for this.stack1.Len() > 0 {
this.stack2.PushBack(this.stack1.Remove(this.stack1.Back()))
}
}
if this.stack2.Len() != 0 {
e := this.stack2.Back()
this.stack2.Remove(e)
return e.Value.(int)
}
return -1
}
先调用 AppendTail 函数将所有元素插入 stack1,在调用 DeleteHead 函数将 stack1 中的元素转移到 stack2 中,再将元素再出栈。
再调用 DeleteHead 时,先判断 statck2 是否为空,为空则将 stack1 元素移动到 stack2 中,然后将 stack2 中的栈顶元素保存,并弹栈。
全部0条评论
快来发表一下你的评论吧 !