思路很简单:
入队列时,直接压入stack1,出队列时,如果stack2不空,直接pop,否则依次pop stack1中的元素,并push入stack2,随后再从stack2 pop出一个元素,就是队头。
#include <iostream>
#include <stack>
using namespace std;
template <typename T> class CQueue{
public:
CQueue(void);
~CQueue(void);
void appendTail(const T & item);
T deleteHead();
private:
stack<T> stack1;
stack<T> stack2;
};
template <typename T> void CQueue<T>::appendTail(const T &item)
{
stack1.push(item);
}
template <typename T> T CQueue<T>::deleteHead()
{
if (stack2.empty()) {
while (!stack1.empty()) {
T& tmp = stack1.top();
stack1.pop();
stack2.push(tmp);
}
}
if (stack2.empty()) {
cout << "Queue is empty" << endl;
return NULL;
}
T& res = stack2.top();
stack2.pop();
return res;
}
int main(int argc, const char * argv[])
{
return 0;
}