1.两个栈实现一个队列
在这里我们先说明一下,我们在此代码中用到的栈和队列都是STL库中实现的
思路:两个栈,stark1和stark2,将stark1作为存储空间,stark2作为零时缓存区。入队时,将入队元素全部压入stark1中即可。出队时,将stark1中的元素全部pop出来压入stark2中,然后在全部pop出来就,
下面来看一下代码:
class Queue
{
public:
void Push(int val)
{
s1.push(val);
}
int pop()
{
if (s1.empty() && s2.empty())
{
return -1;
}
int a=0;
if (s2.empty())
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
}
a = s2.top();
s2.pop();
return a;
}
private:
std::stack<int> s1;
std::stack<int> s2;
};
int main()
{
Queue q;
for (int i = 0; i < 10; i++)
{
q.Push(i +1);
}
for (int i = 0; i < 10; i++)
{
cout << q.pop() << " ";
}
cout << endl;
return 0;
}
2.两个队列实现一个栈
思路:两个队列,queue1和queue2,入队时,将所有元素都压入queue1中即可。出队时,将queue1中的元素除了队尾元素之外的所有元素全部压入queue2中,然出将queue1中剩余的一个元素出队,在将queue2中所有元素放入queue1中,重复上面的操作。
代码示例如下:
class Stark
{
public:
void push(int val)
{
q1.push(val);
}
int pop()
{
if (q1.empty() && q2.empty())
{
return -1;
}
int a;
while (!q2.empty())
{
q2.pop();
}
while (q1.size() > 1)
{
q2.push(q1.front());
q1.pop();
}
a = q1.front();
while (!q2.empty())
{
q1.push(q2.front());
q2.pop();
}
return a;
}
private:
std::queue<int> q1;
std::queue<int> q2;
};
int main()
{
Stark s;
for (int i = 0; i < 10; i++)
{
s.push(i * 2);
}
for (int i = 0; i < 10; i++)
{
cout << s.pop() << " ";
}
cout << endl;
return 0;
}
以上就是两个栈实现一个队列和两个队列实现一个栈,希望能对大家有所帮助!