7 两个栈模拟队列,两个队列模拟栈

来源:互联网 发布:淘宝手机端怎么加热点 编辑:程序博客网 时间:2024/04/30 05:00

利用两个栈模拟队列

stack1,stack2

首先向stack1当中放入数据,如果需要输出数据,从stack2中delete数据,如果stack2为空,就把stack1中数据导入stack2


<span style="font-size:14px;">#include "static.h"#include <iostream>#include <stack>template<typename T> class CQuue{public:CQuue(){};~CQuue(){};void appendTail(const T &node);T deleteHead();private:stack<T> m_stack1;stack<T> m_stack2; //<存入数据的时候放入到stack1当中,取数据从stack2中取出,如果stack2为空,将stack1中数据转入stack2当中};template<typename T>void CQuue<T>::appendTail(const T &node){m_stack1.push(node);}template<typename T> T CQuue<T>::deleteHead(){if (m_stack2.empty()){if (m_stack1.empty()){printf("There is no data in stack");exit(1);}while(!m_stack1.empty()){m_stack2.push(m_stack1.top());m_stack1.pop();}}T valueTemp = m_stack2.top();m_stack2.pop();printf("%d ",valueTemp);return valueTemp;}int main(){  CQuue<int> cqueue;cqueue.appendTail(1);cqueue.appendTail(3);cqueue.deleteHead();cqueue.appendTail(5);cqueue.appendTail(7);cqueue.deleteHead();cqueue.deleteHead();cqueue.deleteHead();return 0;}</span>

两个队列模拟栈

这里用的方法和书中提到的方法不太一样,但是大致意思都是相同的,但是书中的方法会减少判断语句

两个队列,每次放入数据将数据放入一个空的队列当中,同时将另一个队列中的数据copy到当前这个队列当中,又保持一个空队列

输出数据的时候就从非空队列中输出

但是这样的方法每输入一个数据就需要copy一次,也比较麻烦

在书中,是每一次输出数据的时候需要将前面的数据copy到另一个queue当中

<span style="font-size:14px;">#include "static.h"#include <iostream>#include <queue>template<typename T>class CStack{public:CStack(){};~CStack(){};void appendTail(const T& node);T deleteHead();private:queue<T> m_queue1;queue<T> m_queue2; //<存入数据的时候放入到m_queue1当中,然后再将数据都导入进queue2当中,然后每次添加数据放入一个空的queue当中};template<typename T>void CStack<T>::appendTail(const T& node){if (m_queue1.size()== 0){m_queue1.push(node);while (!m_queue2.empty()){m_queue1.push(m_queue2.front());m_queue2.pop();}}else{m_queue2.push(node);while (!m_queue1.empty()){m_queue2.push(m_queue1.front());m_queue1.pop();}}}template<typename T>T CStack<T>::deleteHead(){T tempValue;if (m_queue1.empty() && m_queue2.empty()){printf("the stack is empty");exit(1);}if (m_queue1.size()>0){tempValue = m_queue1.front();m_queue1.pop();}else{tempValue = m_queue2.front();m_queue2.pop();}printf("%d ",tempValue);return tempValue;}int main(){  CStack<int> cstack;cstack.appendTail(1);cstack.deleteHead();cstack.appendTail(3);cstack.appendTail(5);cstack.appendTail(7);cstack.deleteHead();cstack.deleteHead();cstack.deleteHead();return 0;}</span>


0 0
原创粉丝点击