剑指offer面七_用两个队列实现栈
2015-05-15 16:14
211 查看
#include<iostream>
#include<queue>
using namespace std;
template<typename T> class MyStack
{
public:
MyStack();
~MyStack();
void append(const T& node);
T deleteHead();
private:
queue<T> queue1;
queue<T> queue2;
};
//构造函数
template<typename T> MyStack<T>::MyStack()
{
}
//析构函数
template<typename T> MyStack<T>::~MyStack()
{
}
//插入元素
template<typename T> void MyStack<T>::append(const T& node)
{
if(queue1.size()>0)
queue1.push(node);
else if(queue2.size()>0)
queue2.push(node);
else
queue1.push(node);
}
//删除元素并返回出栈元素
template<typename T> T MyStack<T>::deleteHead()
{
if(queue1.size()==0)//如果queue1位空
{
while(queue2.size()>1)
{
int data=queue2.front();
queue1.push(data);
queue2.pop();
}
T& head=queue2.front();
queue2.pop();
return head;
}
else //如果queue2位空
{
while(queue1.size()>1) //保证queue1中有一个元素
{
int data=queue1.front();
queue1.pop();
queue2.push(data);
}
T& head=queue1.front();
queue1.pop();
return head;
}
}
int main()
{
MyStack<int> St;
St.append(1);
St.append(2);
St.append(3);
for(int i=0;i<3;i++)
cout<<St.deleteHead()<<endl;
return 0;
}
#include<queue>
using namespace std;
template<typename T> class MyStack
{
public:
MyStack();
~MyStack();
void append(const T& node);
T deleteHead();
private:
queue<T> queue1;
queue<T> queue2;
};
//构造函数
template<typename T> MyStack<T>::MyStack()
{
}
//析构函数
template<typename T> MyStack<T>::~MyStack()
{
}
//插入元素
template<typename T> void MyStack<T>::append(const T& node)
{
if(queue1.size()>0)
queue1.push(node);
else if(queue2.size()>0)
queue2.push(node);
else
queue1.push(node);
}
//删除元素并返回出栈元素
template<typename T> T MyStack<T>::deleteHead()
{
if(queue1.size()==0)//如果queue1位空
{
while(queue2.size()>1)
{
int data=queue2.front();
queue1.push(data);
queue2.pop();
}
T& head=queue2.front();
queue2.pop();
return head;
}
else //如果queue2位空
{
while(queue1.size()>1) //保证queue1中有一个元素
{
int data=queue1.front();
queue1.pop();
queue2.push(data);
}
T& head=queue1.front();
queue1.pop();
return head;
}
}
int main()
{
MyStack<int> St;
St.append(1);
St.append(2);
St.append(3);
for(int i=0;i<3;i++)
cout<<St.deleteHead()<<endl;
return 0;
}
相关文章推荐
- 栈与队列的实现__ 两个栈实现队列 vs 两个队列实现栈
- 一张图展示:用两个栈来实现一个队列,完成队列的Push和Pop操作
- 两个栈实现队列和两个队列实现栈
- 剑指offer系列之5:用两个栈来实现队列
- 剑指offer——用两个栈实现队列(Java)
- 两个栈实现队列+两个队列实现栈----java
- 剑指 offer 面试题 7 : 用两个栈来实现队列
- 5、用两个栈实现队列
- 九度OJ 1512 用两个栈实现队列 【数据结构】
- C++:利用两个栈实现队列操作
- 面试题--用两个栈实现一个队列
- 剑指offer-算法题练习:part5 用两个栈实现队列
- 013实现使用两个堆栈队列(keep it up)
- 用两个栈实现队列&&用两个队列实现一个栈
- 用两个栈实现队列
- 用两个队列实现一个栈 JAVA实现
- 剑指offer 07 用两个栈实现队列
- 用两个栈实现一个队列的问题
- 用两个栈实现队列
- C++两个队列实现一个栈