【1】题目
【2】思路
先进入stack1,然后在出栈放入stack2;
注意:如何不改变原有的栈顺序,按照正序打印显示,需要添加一个栈或者容器进行辅助。
【3】源码
#include <iostream>
#include<fstream>
#include<stack>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
//两个栈实现队列
template<class T> class CQueue
{
public:
CQueue();
~ CQueue();
//添加节点
void appendTail(const T &node);
//删除节点
T deleteHead();
void printHead();
private:
stack<T> stack1;
stack<T> stack2;
};
template <class T>
CQueue<T> :: CQueue()
{
}
template <class T>
CQueue<T>::~ CQueue()
{
}
//存入元素
template <class T>
void CQueue<T>::appendTail(const T &element)
{
stack1.push(element);
}
//删除头部节点
template <class T>
T CQueue<T>::deleteHead()
{
//若两个栈均是空的
if (stack1.empty()==1 && stack2.empty() == 1)
{
throw exception("stack is empty");
}
//至少存在一个元素
cout << "stack2.size()=" << stack2.size() << endl;
if (stack2.size()<= 0)
{
while (stack1.size()>0)
{
T &data = stack1.top();
stack1.pop();
stack2.push(data);
}
}
T head = stack2.top();
stack2.pop();
return head;
}
//显示队列里面的元素
template <class T>
void CQueue<T>::printHead()
{
//若两个栈均是空的
if (stack1.empty() == 1 && stack2.empty() == 1)
{
throw exception("stack is empty");
}
//至少存在一个元素
if (stack2.size() <= 0)
{
while (stack1.size() > 0)
{
T &data = stack1.top();
stack1.pop();
stack2.push(data);
cout << data << endl;
}
}
}
void main()
{
CQueue<int> myqueu;
for (size_t i = 0; i <10; i++)
{
myqueu.appendTail(i*i);
cout << "save successful!" << endl;
}
myqueu.printHead();
//删除头结点
int deletevalue=myqueu.deleteHead();
cout << "delete value is:" << deletevalue;
cin.get();
}