思路:用两个栈来模拟实现,假设存数据的栈是d,一个辅助的栈是h,那么模拟入队就是直接将数据插入d即可,模拟出队则需要先判断h是否为空,若为空就将d中的数据全部入到h中,再从h中出一个数据,若不为空,直接从h中出一个数据就行。
参考代码:
class myqueue
{
public:
myqueue(stack<int>* v1,stack<int>* v2) : s1(v1),s2(v2){}
void push(int d);
int pop();
private:
stack<int>* s1;
stack<int>* s2;
};
void myqueue:: push(int d)
{
s1->push(d);
}
int myqueue:: pop()
{
if(s1->empty() && s2->empty()) return -1;
int t = 0;
if(s2->empty())
{
while(!s1->empty())
{
s2->push(s1->top());
s1->pop();
}
}
t = s2->top();
s2->pop();
return t;
}