您的位置:首页 > 其它

栈与队列

2015-07-26 22:21 337 查看
1.用2个栈实现一个队列(剑指offer——面试题7)

思想:往队尾添加结点的时候,就是把当前结点压入stack1中。删除队首的结点时,首先判断stack2是否为空,如果stack2为空,则把stack1中的所有结点都压入到stack2中。如果stack2仍然为空,说明队列为空。删除stack2中的栈顶结点。

#include<stack>
#include<queue>
#include<iostream>
using namespace std;

//用2个栈实现队列
template<typename T>
class CQueue{
public:
CQueue(void);
~CQueue(void);
void appendTail(const T& node);
T deleteHead();
private:
stack<T> stack1;
stack<T> stack2;
};

template<typename T> void CQueue<T>::appendTail(const T& element)
{
stack1.push(element);
}

template<typename T> T CQueue<T>::deleteHead()
{
if(stack2.size()<=0)
{
while(stack1.size()>0)
{
T & data=stack1.top();
stack1.pop();
stack2.push(data);
}
}
if(stack2.size()==0)
throw new exception("queue is empty");
T head=stack2.top();
stack2.pop();
return head;
}


2.用2个队列实现一个栈

思想:第一个结点可以随意往任意空栈中添加。接下来往栈中添加结点的时候就是把结点压入非空的那个栈的末尾。删除结点时,依次删除非空队列中的结点,并且压入到另一个队列中,直到当前队列剩下最后一个结点,将其删除。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: