您的位置:首页 > Web前端

剑指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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: