使用两个栈(stack)实现队列(queue)的基本功能
大概实现过程
两个栈s1 s2
push到队列的元素都push到s1中
如果要Pop,看s2是否为空,不是空的直接pop s2 的元素
如果空的就把s1的元素都倒到s2中,再pop s2 的元素
template<class T>
class my_Queue{
private:
stack<T> s1,s2;
public:
void my_Push(T v){
s1.push(v);
}
T my_Front(){
if(s2.empty()){
while(!s1.empty()){
s2.push(s1.top());
s1.pop();
}
}
return s2.top();
}
void my_Pop(){
if(s2.empty()){
while(!s1.empty()){
s2.push(s1.top());
s1.pop();
}
}
s2.pop();
}
void my_Clear(){
while(!s1.empty())
s1.pop();
while(!s2.empty())
s2.pop();
}
bool my_Empty(){
if(s1.empty()&&s2.empty())
return true;
else
return false;
}
};
// main.test
int main()
{
my_Queue<int> q;
q.my_Push(1);
q.my_Push(2);
q.my_Push(3);
cout<<q.my_Front()<<endl;
q.my_Pop();
q.my_Push(4);
cout<<q.my_Front()<<endl;
q.my_Pop();
cout<<q.my_Front()<<endl;
q.my_Pop();
if(!q.my_Empty()) cout<<"it's not empty"<<endl;
cout<<q.my_Front()<<endl;
q.my_Clear();
if(q.my_Empty()) cout<<"it's empty"<<endl;
return 0;
}