【算法百题之五】利用两个栈实现一个队列
大家好,我是Lampard~~
很高兴又能和大家见面了,接下来准备系列更新的是算法题,一日一练,早日升仙!
今天的问题是:
如何利用两个栈去实现一个队列的功能。
我的思路:
使用两个栈,栈A作为存储数据的容器,栈B作为输出数据的容器,通过两个栈的调用把输出的顺序改变成先入先出。
(流程看上面!!!)
#include "pch.h"
#include "MyQueue.h"
#include <stack>
#include <iostream>
using namespace std;
void MyQueue::Push(int num)
{
A.push(num);
}
void MyQueue::Pop()
{
if (A.size() == 0 && B.size() == 0)
cout << "队列为空" << endl;
else if (B.size() != 0 )
B.pop();
else if (B.size() == 0 && A.size() != 0)
{
int Size=A.size();
for (int i = 0; i < Size; i++)
{
B.push(A.top());
A.pop();
}
B.pop();
}
}
void MyQueue::GetNum()
{
if (A.size() == 0 && B.size() == 0)
{
cout << "队列为空" << endl;
return ;
}
else if (B.size() != 0)
cout << B.top() << endl;
else if (B.size() == 0 && A.size() != 0)
{
int Size = A.size();
for (int i = 0; i < Size; i++)
{
B.push(A.top());
A.pop();
}
cout << B.top() << endl;
}
}
测试结果: