#include<iostream>
#include<queue>
using namespace std;
template<class T>
class CStack
{
public:
void push(const T& element);
T pop();
private:
queue<T> queue1;
queue<T> queue2;
};
template<class T>
void CStack<T>::push(const T& element)
{
if (queue1.size() == 0 && queue2.size() == 0)
queue1.push(element);
else if (queue1.size() != 0)
queue1.push(element);
else
queue2.push(element);
}
template<class T>
T CStack<T>::pop()
{
if (queue1.size() == 0 && queue2.size() == 0)
throw new exception("empty");
T head;
if (queue1.size() != 0)
{
while (queue1.size() > 1)
{
T data = queue1.front();
queue1.pop();
queue2.push(data);
}
if (queue1.size() == 1)
{
head = queue1.front();
queue1.pop();
}
}
else
{
while (queue2.size() > 1)
{
T data = queue2.front();
queue2.pop();
queue1.push(data);
}
if (queue2.size() == 1)
{
head = queue2.front();
queue2.pop();
}
}
return head;
}
int main()
{
CStack<int> c;
for (int i = 0; i < 10; i++)
c.push(i);
for (int i = 0; i < 10; i++)
cout << c.pop() << " ";
}
两个队列实现栈
最新推荐文章于 2024-02-22 16:56:07 发布