10.1-7 兩個隊列實現一個棧

/*兩個隊列實現一個棧
設兩個隊列爲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;
}

發佈了47 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章