/*兩個隊列實現一個棧
設兩個隊列爲q1,q2
入棧、出棧操作完成後,都會至少有一個隊列爲空。
入棧:元素入隊到非空隊列(若q1,q2都空,入任意一隊)
出隊:非空隊列Q的元素出隊,入隊到空隊列eQ。
當非空隊列Q剩下一個元素時,直接出隊。此時,
原來的空隊列eQ變成非空隊列Q,原來的非空隊列Q變成空隊列eQ。*/
#include<cstdio>
#include<queue>
using namespace std;
typedef char ElemType;
queue <ElemType> q1;
queue <ElemType> q2;
void popout(queue Q,queue eQ)//非空隊列Q,空隊列eQ
{//Q一定非空
int size=Q.size();size--;
while(size--){
eQ.push(Q.front());Q.pop();
}
putchar(Q.front());Q.pop();
}
void push(ElemType elem)//O(1)
{
if(q1.empty()) q2.push(elem);
else q1.push(elem);
}
void pop()//O(n)
{
if(q1.empty()){
if(q2.empty()) puts("stack underflow!");
else popout(q2,q1);//q1空,q2非空
}else
popout(q1,q2);//q1非空,q2空
}
int main(void)
{
pop();
return 0;
}
10.1-7 兩個隊列實現一個棧
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.