/*兩個棧實現一個隊列
設兩個棧爲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;
}
10.1-6 兩個棧實現一個隊列
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.