您的位置:首页 > 职场人生

剑指offer--面试题9:用两个栈实现队列

2017-07-05 21:22 405 查看


#include <iostream>
#include <stack>
using namespace std;
//***************数据结构*******************
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>
CQueue<T>::CQueue(void)
{
}

template <typename T>
CQueue<T>::~CQueue(void)
{
}

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

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

return temp;
}

int main()
{
CQueue<char> queue;

queue.appendTail('a');
queue.appendTail('b');
queue.appendTail('c');

cout <<  queue.deleteHead() << endl;
cout <<  queue.deleteHead() << endl;

queue.appendTail('d');
cout <<  queue.deleteHead() << endl;

queue.appendTail('e');
cout <<  queue.deleteHead() << endl;

cout <<  queue.deleteHead() << endl;

return 0;
}





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

queue<char> q1;
queue<char> q2;
void appendTail(const char data)
{

if (q1.size()==0 && q2.size() ==0)//如果q1与q2都为空,那么往q1中插入元素
{
q1.push(data);
}
else if (q1.size()>0)//如果q1不为空,那么往q1中插入元素
{
q1.push(data);
}
else if(q2.size()>0)//如果q2不为空,那么往q1中插入元素
{
q2.push(data);
}

}
char deleteTail()
{ char temp;
if (q2.size() == 0)
{
while(q1.size() != 1)
{
q2.push(q1.front());
q1.pop();
}
temp = q1.front();
q1.pop();
}
else
{
while(q2.size() != 1)
{
q1.push(q2.front());
q2.pop();
}
temp = q2.front();
q2.pop();
}
return temp;
}

int main()
{
appendTail('a');
appendTail('b');
appendTail('c');

cout << deleteTail() << endl;
cout << deleteTail() << endl;

appendTail('d');
cout << deleteTail() << endl;

appendTail('e');
cout << deleteTail() << endl;

cout << deleteTail() << endl;

return 0;
}

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