栈是先进后出,而队列是先进先出。利用两个栈能够将顺序颠倒。
具体思想如下,前提是第一个栈不为空时,应改完全导入到第二个栈。
如果新的数据到来,直接压入第一个栈中。
当想查询时,如果第二个栈没有数据,需要一次性将第一个栈中所有的数据全部加载到第二个栈中。然后读取最顶层的那个,读出并返回。
如果第二个栈有数据,需要首先读取第二个栈,并进行弹出操作。
确保先进先出的特性
#include <stack>
#include <iostream>
using namespace std;
class MyQueue
{
stack<int> t1,t2;
void push(int n)
{
t1.push(n);
}
int pop()
{
if( t2.empty())
{
while(!t1.empty())
{
temp = t1.top();
t2.push(temp);
t1.pop()
}
}
res = t2.top();
t2.pop();
return res;
}
top()
{
return t2.top()
}
}
int main()
{
queue_test = MyQueue;
for i in range(10)
{
queue_test.push(i);
}
for i in range(10)
{
print(queue_test.top());
queue_test.pop();
}
return 0;
}