用兩個棧實現一個隊列。隊列的聲明以下,請實現它的兩個函數 appendTail
和 deleteHead
,分別完成在隊列尾部插入整數和在隊列頭部刪除整數的功能。(若隊列中沒有元素,deleteHead
操做返回 -1 )golang
示例 1:app
輸入: ["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
來進行模擬ui對於隊列的appendTail操做,咱們只需在輸入棧stackIn中push便可this
對於隊列的deleteHead操做,相對複雜一些,若是輸出棧stackOut爲空,則將輸入棧中的元素所有導入輸出棧stackOut中,再從輸出棧中pop,若是輸出棧不爲空,則直接pop輸出棧中元素prototype
/*須要一個輸入棧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() */