劍指offer 5 用兩個棧實現佇列

2022-01-29 06:12:01 字數 820 閱讀 6122

題目描述用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。

我們先來了解一下什麼是佇列和棧。

對佇列的理解就像你在排隊,排隊只能從尾部進去,頭部出去,你不能插隊,只能按照規則來,遵循先進先出的原則。而棧不一樣的是只有乙個出入口,進去只能從尾部進去,出去也只能從尾部出去,這個時候你進去的早反而出去的比較晚,遵循先進後出的原則。

題目的要求很簡單,就是利用兩個棧實現乙個佇列。我們就會想用乙個棧來儲存,另乙個棧作為臨時利用,就是說執行push函式的時候和棧的push是一樣的,直接呼叫即可。但是pop的話就不太一樣,佇列是從棧底出去,所以這個時候就要求我們利用另乙個棧,把儲存棧中的元素依次pop到臨時棧中,全部移過去之後再執行pop函式即可實現將棧底的元素彈出,**如下:

let arr1 = ;

let arr2 = ;

function push(node)

function pop()

const num = arr2.pop();

arr1 = ;

for(let i=0; i

arr2 = ;

return num;

}

劍指offer 5 用兩個棧實現佇列

題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。思路 棧 先進後出,佇列 先進先出 1 2 3 棧 3 2 1 1 2 3 佇列 1 2 3 stack1進棧後為1 2 3 出棧並儲存在stack2中為3 2 1,stack2出棧就和佇列一致了。push,...

劍指offer 5 用兩個棧實現佇列

題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解題思路 需要用棧來模擬佇列的push和pop操作。要知道,棧是先進後出,而佇列是先進先出,所以用棧實現佇列的時候,需要兩個棧,進棧可以直接進棧就ok,但是需要首先將兩個棧合為乙個棧,但是出棧的話,需要將原先...

劍指Offer 5 用兩個棧實現佇列

description用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。注 不考慮邊緣情況,如 在兩個stack都空的時候pop 作為乙個lifo的資料結構,stack中的元素在彈出的時候為反序。而為了實現乙個fifo的queue,我們就需要將反序的元素再push進令...