/*两个栈实现一个队列
设两个栈为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 两个栈实现一个队列
最新推荐文章于 2022-06-06 01:20:26 发布