思路:用两个栈来模拟实现,假设存数据的栈是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;
}
博客介绍了用两个栈模拟队列的实现思路。使用存数据的栈d和辅助栈h,入队时直接将数据插入d,出队时先判断h是否为空,为空则将d中数据全入h再从h出一个数据,不为空则直接从h出数据。
646

被折叠的 条评论
为什么被折叠?



