/*栈A提供入栈功能,栈B提供出栈功能,<span style="font-family: Arial, Helvetica, sans-serif;">如果栈B不为空,直接弹出栈B的数据;</span><span style="font-family: Arial, Helvetica, sans-serif;">如果栈B为空,则将栈A中数据依次弹出并压入栈B,再弹出栈B数据。*/</span>
class myQueue{
private:
stack<int> s1;
stack<int> s2;
public:
void en(int data){
s1.push(data);
}
void de(){
if(s2.empty()){
while(!s1.empty()){
int tmp = s1.top();
s1.pop();
s2.push(tmp);
}
}
if(!s2.empty()){
int t = s2.top();
cout<<"出队:"<<t<<endl;
s2.pop();
}
}
bool isEmpty(){
return (s1.empty() && s2.empty());
}
int len(){
return s1.size()+ s2.size();
}
};
int main(){
myQueue q;
q.en(1);
q.en(2);
q.en(3);
cout<<"长度为:"<<q.len()<<endl;
q.de();
q.de();
cout<<q.isEmpty()<<endl;
return 0;
}
两个队列实现一个栈, 栈A用来压入数据,当出栈时,将栈A中数据压入栈B中直至剩最后一个数据,将最后一个数据直接弹出,再将栈B中的数据弹出压入栈A中。
class myStack{
private:
queue<int>q1;
queue<int>q2;
public:
void enStk(int a){
q1.push(a);
}
void deStk(){
while(q1.size()>1){
q2.push(q1.front());
q1.pop();
}
cout<<"出栈:"<<q1.front()<<endl;
q1.pop();
while(!q2.empty()){
q1.push(q2.front());
q2.pop();
}
}
};
int main(){
myStack stk;
stk.enStk(1);
stk.enStk(2);
stk.enStk(3);
stk.enStk(4);
stk.deStk();
stk.deStk();
return 0;
}