标签:problems cal lock ola number var ons 用两个 cti
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail
和 deleteHead
,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead
操作返回 -1 )
示例 1:
输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]
示例 2:
输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
需要一个
输入栈stackIn
和一个输出栈stackOut
来进行模拟对于队列的appendTail操作,我们只需在输入栈stackIn中push即可
对于队列的deleteHead操作,相对复杂一些,如果输出栈stackOut为空,则将输入栈中的元素全部导入输出栈stackOut中,再从输出栈中pop,如果输出栈不为空,则直接pop输出栈中元素
/*需要一个输入栈stackIn和一个输出栈stackOut来进行模拟*/
type CQueue struct {
stackInt []int
stackOut []int
}
func Constructor() CQueue {
return CQueue{}
}
//在队列尾部插入整数
//对于队列的appendTail操作,我们只需在输入栈stackIn中push即可
func (this *CQueue) AppendTail(value int) {
this.stackInt = append(this.stackInt, value)
}
//在队列头部删除整数
/*对于队列的deleteHead操作,相对复杂一些,如果输出栈stackOut为空,则将输入栈中的元素全部导入输出栈stackOut中,再从输出栈中pop,如果输出栈不为空,则直接pop输出栈中元素*/
func (this *CQueue) DeleteHead() int {
//队列中没有元素 DeletedHead返回-1
if len(this.stackInt) == 0 && len(this.stackOut) == 0 {
return -1
}
if len(this.stackOut) == 0 {
//输出栈为空 则将输入栈中的元素全部导入到输出栈中,再删除
for len(this.stackInt) != 0 {
//获取输入栈栈顶元素并删除
val := this.stackInt[len(this.stackInt)-1]
this.stackOut = append(this.stackOut, val)
this.stackInt = this.stackInt[:len(this.stackInt)-1]
}
}
//输出栈不为空,直接删除队列头元素
val := this.stackOut[len(this.stackOut)-1]
this.stackOut = this.stackOut[:len(this.stackOut)-1]
return val
}
/**
* Your CQueue object will be instantiated and called as such:
* obj := Constructor();
* obj.AppendTail(value);
* param_2 := obj.DeleteHead();
*/
var CQueue = function() {
this.stackInt = [];//输入栈
this.stackOut = [];//输出栈
};
/**
* @param {number} value
* @return {void}
*/
//追加元素到队列尾部操作
CQueue.prototype.appendTail = function(value) {
//直接追加元素到输入栈中
this.stackInt.push(value)
};
/**
* @return {number}
*/
//删除队列首部元素
CQueue.prototype.deleteHead = function() {
//如果队列元素为空 返回-1
if(this.stackInt.length===0&&this.stackOut.length===0) return -1;
//如果输出栈为空 则先将输入栈中的元素导入到输出栈中再进行删除
if(this.stackOut.length==0){
//获取输入栈栈顶元素 追加到输出栈中并删除栈顶元素
while (this.stackInt.length!=0)
this.stackOut.push(this.stackInt.pop())
}
//删除队首元素 并返回
return this.stackOut.pop()
};
/**
* Your CQueue object will be instantiated and called as such:
* var obj = new CQueue()
* obj.appendTail(value)
* var param_2 = obj.deleteHead()
*/
标签:problems cal lock ola number var ons 用两个 cti
原文地址:https://www.cnblogs.com/zmk-c/p/14612320.html