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

/*兩個棧實現一個隊列
設兩個棧爲s1,s2
入隊:元素入棧到s1。
出隊:若s2非空,彈出s2棧頂元素;否則,
將s1的所有元素倒入s2(s1棧底元素會到s2棧頂),再彈出s2棧頂元素*/
#include<cstdio>
#include<stack>
using namespace std;
typedef char ElemType;
stack <ElemType> s1;
stack <ElemType> s2;
void enqueue(ElemType elem)//O(1)
{
    s1.push(elem);
}
void dequeue()//O(n)
{
    if(!s2.empty()) {putchar(s2.top());s2.pop();}
    else{
        while(!s1.empty()){
            s2.push(s1.top());s1.pop();
        }
        if(s2.empty()) puts("stack underflow!");
        else{
            putchar(s2.top());s2.pop();
        }
    }
}
int main(void)
{
    dequeue();
    enqueue('a');
    enqueue('b');
    enqueue('c');
    dequeue();
    enqueue('d');
    enqueue('e');
    enqueue('f');
    enqueue('g');
    dequeue();
    dequeue();
    dequeue();
    dequeue();
    dequeue();
    dequeue();
    dequeue();
    return 0;
}


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