这道题我们先应该搞清楚栈和队列这两种数据结构。
队列:队列(queue)特点:先进先出(FIFO)
栈:(stack)特点:后进先出(FILO)。
思路:
创建一个栈,存放两个队列,一个队列用来存数据,一个队列中转数据。例如 1,2,3,4
在queue1中,要实现后进先出,则把前面三个数据移到queue2中,pop() 出queue1 ,最后再把queue2的数据移动到queue1中。
要统计只需要统计queue1中的数据即可,
缺点:时间复杂度高,系统消耗大。
代码:
#include<iostream>
#include<queue>
using namespace std;
template <class T>
class MyStack
{
public:
void Push(const T&x)
{
_q1.push(x);
}
void Pop()
{
if (_q1.size() != 0)
{
for (int idx = 0; idx <=_q1.size(); idx++)
{
T temp = _q1.front();
_q1.pop();
_q2.push(temp);
}
if (_q1.size() == 1)
_q1.pop();
}
while (_q2.size() != 0)
{
T temp = _q2.front();
_q1.push(temp);
_q2.pop();
}
}
const size_t& Size()const
{
return _q1.size();
}
const T & Front()const
{
return _q1.front();
}
const T & Back()const
{
return _q1.back();
}
protected:
queue<T> _q1;
queue<T> _q2;
};
//test Mystack/ Push/Pop/Size/Front/Back
void TestFun1()
{
MyStack<int> s1;
s1.Push(1);
s1.Push(2);
s1.Push(3);
s1.Push(4);
s1.Pop();
cout<<s1.Size()<<endl;
cout << s1.Front()<<endl;
cout << s1.Back();
}
int main()
{
TestFun1();
return 0;
}
测试:
测试结果: