利用两个栈模拟队列
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>
时间: 2024-12-28 00:42:08