栈:先进后出
队列:先进先出
首先构建栈q1,q2。
入队列:入栈q1。
出队列:首先将q1中的所有元素依次压入q2中,此时q1为空,q2中存放所有数据,在依次将q2中数据pop,即实现队列。
代码实现如下:
#include <iostream>
#include <stack>
#include <Windows.h>
#include <assert.h>
using namespace std;
template <class T>
class Queue
{
public:
Queue()
:_size(0)
{}
~Queue()
{}
void Push(const T& x) //入队列
{
q1.push(x);
++_size;
}
void Pop() //出队列
{
assert(_size != 0); //判断栈中元素不为空
size_t size = q1.size(); //q1中元素的个数
while (size != 0) //q1不为空时
{
T temp = q1.top(); //取q1的队头数据
q2.push(temp);
q1.pop();
--size;
}
//此时,已经将数据全部压入队列q2中,q1为空,由q2实现队列
size = q2.size();
if (size != 0)
{
q2.pop();
--size;
}
--_size;
}
void Print() //打印
{
size_t size = q1.size();
while (size)
{
cout << q1.top() << " ";
q1.pop();
--size;
}
size = q2.size();
while (size)
{
cout << q2.top() << " ";
q2.pop();
--size;
}
cout << endl;
}
size_t Size() //队列中的数据个数
{
return _size;
}
bool Empty() //判空
{
return _size ? false : true;
}
protected:
stack<T> q1; //栈1
stack<T> q2; //栈2
size_t _size; //队列中的数据个数
};
#include "queue.h"
void TestQueue()
{
Queue<int> pp;
pp.Push(1);
pp.Push(2);
pp.Push(3);
pp.Push(4);
pp.Push(5);
pp.Push(6);
pp.Push(7);
pp.Push(8);
pp.Push(9);
pp.Push(10);
pp.Pop();
pp.Pop();
pp.Pop();
pp.Pop();
pp.Pop();
pp.Print();
cout << pp.Size() << endl;
cout << pp.Empty() << endl;
}
int main()
{
TestQueue();
system("pause");
return 0;
}