用兩個佇列實現乙個棧的功能操作C

2021-07-22 14:13:28 字數 976 閱讀 4882

解法:

1.有兩個佇列q1和q2,先往q1內插入a,b,c,這做的都是棧的push操作。

2.現在要做pop操作,即要得到c,這時可以將q1中的a,b兩個元素全部dequeue並存入q2中,這時q2中元素為a,b,對q1再做一次dequeue操作即可得到c。

3.如果繼續做push操作,比如插入d,f,則把d,f插入到q2中,

4.此時若要做pop操作,則做步驟2

5.以此類推,就實現了用兩個佇列來實現乙個棧的目的。

注意在此過程中,新push進來的元素總是插入到非空佇列中,空佇列則用來儲存pop操作之後的那些元素,那麼此時空佇列不為空了,原來的非空佇列變為空了,總是這樣迴圈。

對於push和pop操作,其時間為o(n).

#include#include#include#includeusing namespace std;

template class cstack

; ~cstack(void){};

void push(const t& node);

t pop();

private:

queuequeue1;

queuequeue2;

};//插入元素

template void cstack::push(const t& node)

//佇列的限制性,只能在隊尾插入元素,在隊頭刪除元素。

template t cstack::pop()

t&data=queue2.front();//將queue2中的那個最後的元素直接取出後再pop 掉。

queue2.pop();

return data;

} else//如果queue2為空

t& data=queue1.front();

queue1.pop();

return data;

}}

用兩個棧實現乙個佇列功能

1 c 實現 include includeusing namespace std 使用兩個堆疊實現佇列 s1 實現入隊,s2 實現出隊 首先,將資料存放在棧s1中,然後將資料push進s2中,再將s2中的資料pop 出佇列 1 如果棧b不為空,直接彈出棧b的資料 2 如果棧b為空,則依次彈出棧a的...

用兩個棧實現乙個佇列 用兩個佇列實現乙個棧

做題之前,我們先來回顧一下 棧和佇列的相同點以及不同點 便於做題時的應用!1.區別與聯絡 相同點 1 棧和佇列都是控制訪問點的線性表 2 棧和佇列都是允許在端點處進行資料的插入和刪除的資料結構 不同點 1 棧遵循 後進先出 lifo 的原則,即只能在該線性表的一頭進行資料的插入和刪除,該位置稱為 棧...

用兩個棧實現乙個佇列,用兩個佇列實現乙個棧

t deletehead 頭部刪除節點 while s1.empty t ret s2.top s2.pop return ret private stacks1 stacks2 問題2 用兩個佇列實現乙個棧 問題分析 用兩個佇列實現乙個棧,刪除時,由於佇列是先進先出的,而棧是後進先出,因此假設現在...