棧和佇列是兩種常用的資料結構,他們的地城實現基本也就兩種:陣列和鍊錶。陣列是是將元素在記憶體中連續存放,鍊錶是用指標來索引資料。具體請自行google,不是要講的重點。
要先符合棧的先進後出(後進先出),用乙個佇列是不行的,必需數量大於1。主要思想如下:
假設有個一串數字a,b,c,d順序入棧,出來的結果應該是d,c,b,a,有兩個佇列q1,q2,
第一步:隨便找乙個空的佇列q1,將a放入到q1,此時q2中資料為空,q1裡面有a。
第二步:找到空的佇列q2,將b放入,並將 q1裡面的值(a)全部輸出,加入到q2中,此時q1為空,q2裡面有b,a。
第三步:將c放入到空的佇列q1中,將q2裡面的值(b,a)全部輸出,放入到q1中,此時q2裡面值為空,q1裡面有c,b,a。
……不斷迴圈就可以用兩個佇列實現乙個棧的功能,給張圖參考一下
主要點:需要將有值的佇列裡面的值輸出放到新新增值的佇列。
要先符合佇列的先進先出(後進後出),用乙個棧是不行的,必需數量大於1。主要思想如下:
假設有個一串數字a,b,c,d順序進佇列,出來的結果應該是a,b,c,d,有兩個佇列s1,s2,
第一步:隨便找乙個空的棧s1,將a放入到s1,此時s2中資料為空,s1裡面有a。
第二步:找到空的佇列s2,將b放入,並將 s1裡面的值(a)全部彈出,加入到s2中,此時s1為空,s2裡面有a,b。
第三步:在c要新增進棧之前,將棧s2 中的資料彈出,放到s1中,看到s1中的值為b,a,見圖第四步,將c放入到空的棧s2中,將s2裡面的值(c)全部彈出,放入到s1中,此時s2裡面值為空,s1裡面有c,b,a。
第四步:將s1中的值全部彈出,放到s2中,此時s1為空,s2裡面有a,b,c。
第五步:在將d要新增進棧之前,將s2中的值(a,b,c)全部彈出,放到 s1中,此時s2為空,s1中有(c,b,a),d入棧s2,彈出d放到 s1中,此時s2為空,s1裡面有(d,c,b,a)。
第六步:將s1值全部彈出,放入到s2中,此時s1為空,s2有(a,b,c,d)。
……不斷迴圈就可以用兩個棧實現乙個佇列的功能,給張圖參考一下
主要點:在新增值之前,需要將有值的棧裡面的值先彈出來倒著,然後將新值拼接上去,再輸出放到另外乙個棧。
好了,實現完畢!
兩個棧實現佇列 兩個佇列實現棧
1.兩個棧實現佇列 大致思路 入佇列時,將元素入棧s1,出佇列時,將s2中的元素出棧即可,如果s2為空,那麼將s1中 s1.size 1 個元素出棧,加入到s2中,然後將s1中最後乙個元素出棧,即完成了出佇列的操作 include using namespace std include includ...
兩個棧實現佇列,兩個佇列實現棧
include include include using namespace std 使用兩個棧實現佇列,實現了push,pop,front操作 其中棧s2是輔助棧,push直接在s1中插入 pop從s2中出棧,如果s2是空的,將s1倒進s2,然後再出棧,這樣減少了倒棧次數,比較高效。front就...
兩個棧實現佇列 兩個佇列實現棧
一 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。二 1 自己 基本思路 乙個棧用於壓縮,乙個專門用於彈出。因為棧是先進後出,所有的元素入棧再出棧,再入棧就可以將順序調整過來。但是沒有想到優化。class solution int pop int tem...