两个栈实现队列及两个队列实现栈
2015-08-02 18:43
323 查看
用两个栈实现队列的push() 和 pop()
两个队列实现一个栈
进栈就是进队列,出栈 先把元素进一个队列queue1,然后除了队尾元素其余全部进队列queue2, 然后queue1出队列。
[code]#include <iostream> #include <stack> #include <stdexcept> using namespace std; template <class T> class CQueue { public: CQueue() {}; ~CQueue() {}; void appendTail(const T& node); T deleteHead(); private: stack<T> stack1; stack<T> stack2; }; template <class T> void CQueue<T>::appendTail(const T& node) { stack1.push(node); } template <class T> T CQueue<T>::deleteHead() { if (stack2.empty()) { while (!stack1.empty()) { T& tmp = stack1.top(); stack1.pop(); stack2.push(tmp); } } if (stack2.empty()) { throw runtime_error(" queue is empty"); } T head = stack2.top(); stack2.pop(); return head; } void Test(int actual, int excepted) { if (actual == excepted) cout << "Test passed.\n"; else cout << "Test failed.\n"; } int main() { try { CQueue<int> queue; queue.appendTail(1); queue.appendTail(2); queue.appendTail(3); int head = queue.deleteHead(); Test(head,1); head = queue.deleteHead(); Test(head,2); queue.appendTail(4); head = queue.deleteHead(); Test(head,3); queue.appendTail(5); head = queue.deleteHead(); Test(head,4); head = queue.deleteHead(); Test(head,5); } catch (runtime_error err) { cout << err.what() << endl; } return 0; }
两个队列实现一个栈
进栈就是进队列,出栈 先把元素进一个队列queue1,然后除了队尾元素其余全部进队列queue2, 然后queue1出队列。
[code]#include<iostream> #include<stdlib.h> #include<stack> #include<queue> using namespace std; template <typename T>class CStack { public: CStack(void){}; ~CStack(void){}; void push(const T& node); T pop(); private: queue<T> queue1; queue<T> queue2; }; //插入元素 template <typename T> void CStack<T>::push(const T& element) { if(queue1.size()>0)//如果queue1不为空则往queue1中插入元素 queue1.push(element); else if(queue2.size()>0)//如果queue2不为空则往queue2中插入元素 queue2.push(element); else//如果两个队列都为空,则往queue1中插入元素 queue1.push(element); } //删除元素 template <typename T> T CStack<T>::pop() { if(queue1.size()==0)//如果queue1为空 { while(queue2.size()>1)//保证queue2中有一个元素,将其余元素保存到queue1中 { queue1.push(queue2.front()); queue2.pop(); } T& data=queue2.front(); queue2.pop(); return data; } else//如果queue2为空 { while(queue1.size()>1)//保证queue1中有一个元素,将其余元素保存到queue2中 { queue2.push(queue1.front()); queue1.pop(); } T& data=queue1.front(); queue1.pop(); return data; } }
相关文章推荐
- poj2342 Anniversary party 题解
- Android 项目的代码混淆,Android proguard 使用说明
- Solr与MySQL查询性能对比
- C++11新特性
- Airplay vs DLNA vs Miracast
- Java多线程之---ThreadGroup 管理Thread
- python抓取新浪微博配图
- 解决eclipse中egit中的cannot open git-upload-pack问题
- HUAS Summer Trainning #3 E
- Django学习(一)
- cursor 与refcursor及sys_refcursor的区别 (转载)
- Oil Deposits(UVA 572)
- Change the ball
- 自定义普通文本TableView header footer 视图
- csdn 回复问题
- 来 不 及 认 真 的 年 轻
- 按工资降序排列,若工资相同,则按照雇佣日期尚需排列,获取6~10 条记录
- uva 10325 容斥原理
- N!Again
- string的初始化