自画草图:
1 2 3 4向s1压栈
s1弹栈,元素为4 3 2 1
4 3 2 1压向s2
s2弹栈为1 2 3 4
即符合队的特征先进先出
设计思路:
1.s1栈往里压数据
2.s2栈只负责弹数据
3.s2弹栈前,先判断s2是否为空栈,如果是空栈,判断s1是否是空栈,都为空栈则队空
4.s1不为空栈则往s2压数据
5.s2出栈
#include <iostream>
#include<stack>//系统栈
using namespace std;
//俩栈实现队列
class MyQueue{
protected:
stack<int> s1;//s1栈只用来往里压数据
stack<int> s2;//s2栈只用来弹数据
public:
//入队 向s1压栈
void enQueue(int ele){
s1.push(ele);
}
//出队 s2弹栈
void deQueue(int &num){//num盛放出队元素
if(s2.empty()){//s2栈是否为空栈
if(s1.empty()){//s1栈是否为空栈
cout<<"空队"<<endl;//s1和s2均为空栈则队空
return ;
}
//把s1的元素弹出来压入s2中
int ele = s1.top();//取栈顶元素,然后弹栈
s1.pop();
s2.push(ele);
}
//s2弹栈,即出队
num = s2.top();
s2.pop();
}
};
int main(){
MyQueue q;
q.enQueue(10);
cout<<"q.enQueue(10)========"<<endl;
int num;
q.deQueue(num);
cout<<"q.deQueue()========"<<num<<endl;
return 0;
}