面試題7兩個棧實現乙個佇列和兩個佇列實現乙個棧

2021-07-03 18:37:49 字數 1509 閱讀 6039

兩個棧實現乙個佇列,本質上是用兩個棧去模擬佇列的入隊和出隊。

寫程式時無需死記,畫個示意圖推一下就好:

stack1,和stack2 去模擬,入隊時只在stack1 中將元素入棧, 出隊時只將stack2的棧頂元素出隊,出隊時 1)首先判斷stack2 是否為空,若stack2 為空將則將stack1中的所有元素彈出壓入stack2    2)此時再判斷棧2是否為空,若為空則丟擲異常,不為空則將stack2的棧頂元素彈出

兩個佇列實現乙個棧,本質上是用兩個佇列去模擬棧的入棧和出棧。 

#include#include#include#include#include#includeusing namespace std;

//兩個佇列實現乙個棧

templateclass mystack

~mystack(){}

void push(const t&element);

t pop();

private:

queuequeue1;

queuequeue2;

};templatevoid mystack::push(const t&element)

else }

templatet mystack::pop()

t deletedelement=queue2.front();

queue2.pop();

return deletedelement;

} else

t deletedelement=queue1.front();

queue1.pop();

return deletedelement; }}

//兩個棧實現乙個佇列

templateclass myqueue

; void push(const t& node);

t pop();

~myqueue(){};

bool empty();

private:

stackstack1;//棧stack1模擬入隊時用

stackstack2;//棧stack2模擬出隊時用

};templatevoid myqueue::push(const t&node)

templatet myqueue::pop()

}if(stack2.empty())

t head=stack2.top();

stack2.pop();

return head;

}templatebool myqueue::empty()

else }

int main()

while(!test.empty())

for(int i=0;i<5;i++)

{ int temp=stacktest.pop();

cout<

面試題(兩個棧實現乙個佇列和兩個佇列實現乙個棧)

面試題 判斷元素出棧入棧順序的合法性。面試題 實現乙個棧,要求實現push 出棧 pop 入棧 min 返回最小值的操作 的時間複雜度為o 1 我們知道棧是後進先出的,而佇列是先進先出的 我們建立兩個棧input 輸入棧 output 輸出棧 我們用input 輸入棧 來負責入隊,而output 輸...

面試題7 兩個棧實現佇列

已知下面stack類及其3個方法push pop和 count,請用2個stack實現queue類的入隊 enqueue 出隊 dequeue 方法。class stack class queue 這道題應該不算難,比起 程式設計之美 中微軟那些什麼 翻烙餅 的面試題,難度上差遠了。況且,由於時間關...

面試題7 用兩個棧實現佇列和用兩個佇列實現乙個棧

template class cqueue 解題思路 插入操作在stack1中進行,刪除操作在stack2中進行,如果stack2為空,則將stack1中的所有元素轉移到stack2中。例項 include include includeusing namespace std template cl...