算法思路:
一个栈用来入队列,一个栈用来出队列:
现有两个栈s1 和s2;s1用来入栈,比如 队列进入 1 2 3 4 5 那么s1进栈 1 2 3 4 5 ,现在要出队列,意思就是要1先出来;
那么我们把栈s1的数据取出来都压到栈s2当中,那么栈s2就是 5 4 3 2 1 ;s2再出栈,此时1出栈就模拟出出队列的效果;
编写代码:
// QueueFrom2Stack.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <stack>
using namespace std;
template<typename T>
class CQueue
{
public:
CQueue(){}
~CQueue(){}
void appendTail(const T& node);
T deleteHead();
void Prints();
private:
stack<T> s1;
stack<T> s2;
};
template<typename T>
void CQueue<T>::appendTail(const T& node)
{
s1.push(node);//入栈即是入队列
}
template<typename T>
T CQueue<T>::deleteHead()
{
if (s2.size() <= 0) //如果栈为空,就要先把s1出栈然后再压栈
{
if (i = 0; i < s1.size();i++)
{
T& data = s1.top();
s1.pop();
s2.push(data);
}
}
if (s2.size() == 0)
{
throw new exception("queue is empty");
}
T head = s2.top();
s2.pop();
return head;
}
template<typename T>
void CQueue<T>::Prints()
{
while (!s1.empty())
{
T& data = s1.top();
cout<<data<<endl;
s1.pop();
}
}
int _tmain(int argc, _TCHAR* argv[])
{
CQueue<int> q;
q.appendTail(1);
q.appendTail(2);
q.appendTail(3);
q.appendTail(4);
q.appendTail(5);
q.Prints();
getchar();
return 0;
}