C++两个栈实现一个队列和两个队列实现一个栈
来源:互联网 发布:dota2公开比赛数据 编辑:程序博客网 时间:2024/05/30 23:01
今天用C++实现了下两个栈模拟一个队列和两个队列模拟一个栈!代码可能有很多漏洞,如果读者发现问题,
可以及时反馈,非常感谢!!!
代码如下:
#include <iostream>#include <stdlib.h>#include <stack>#include <queue>using namespace std;#if 1// *******两个栈实现一个队列********typedef int ElemType;typedef struct { stack<ElemType>s1; //负责入队列 stack<ElemType>s2; //负责出队列}SQueue;//判断队列是否为空bool IsEmpty(SQueue &q) { if ((q.s1.empty()) && (q.s2.empty())) { return true; } return false;}// 入队列void EnQueue(SQueue &q, ElemType e) { q.s1.push(e);}// 队列大小int GetQueueSize(SQueue &q) { return q.s1.size() + q.s2.size();}//出队列void DeQueue(SQueue &q) { if (q.s2.empty()) { while (!q.s1.empty()) { q.s2.push(q.s1.top()); q.s1.pop(); } } if (!q.s2.empty()) { //队空 q.s2.pop(); //出队列 }}// 取队首先元素ElemType GetFront(SQueue &q) { if (q.s2.empty()) { while (!q.s1.empty()) { q.s2.push(q.s1.top()); q.s1.pop(); } } if (q.s2.empty()) { //队空 throw; } return q.s2.top();}int main() { SQueue sq; EnQueue(sq, 1); EnQueue(sq, 2); EnQueue(sq, 3); EnQueue(sq, 4); EnQueue(sq, 5); EnQueue(sq, 6); cout << GetFront(sq) << endl; DeQueue(sq); cout << GetFront(sq) << endl; DeQueue(sq); cout << GetFront(sq) << endl; DeQueue(sq); cout << GetFront(sq) << endl; cout << GetFront(sq) << endl; cout << GetQueueSize(sq) << endl; return 0;}#endif#if 1// ****两个队列实现一个栈****typedef int ElemType;typedef struct { queue<ElemType>q1; //入队 queue<ElemType>q2; //中转}QStack;// 栈是否为空bool IsEmpty(QStack s) { if (s.q1.empty()) { return true; } return false;}// 栈大小int GetStackSize(QStack s) { return s.q1.size();}//压栈void Push(QStack &s, ElemType e) { s.q1.push(e);}//弹栈void Pop(QStack &s) { if (!s.q1.empty()) { while (s.q1.size() != 1) { //队列q1的n-1个元素移动到q2 s.q2.push(s.q1.front()); s.q1.pop(); } s.q1.pop(); while (!s.q2.empty()) { s.q1.push(s.q2.front()); s.q2.pop(); } }}//取栈顶元素int Top(QStack &s) { if (s.q1.empty()) { throw; //栈空 } while (!s.q1.empty()) { //队列q1的n个元素移动到q2 s.q2.push(s.q1.front()); s.q1.pop(); } ElemType tmp = s.q2.back(); //获取第n个元素 while (!s.q2.empty()) { s.q1.push(s.q2.front()); s.q2.pop(); } return tmp;}int main() { QStack qs; Push(qs, 1); Push(qs, 2); Push(qs, 3); Push(qs, 4); try { cout << Top(qs) << endl; Pop(qs); cout << Top(qs) << endl; Pop(qs); cout << Top(qs) << endl; Pop(qs); cout << Top(qs) << endl; Pop(qs); cout << "size:" << GetStackSize(qs) << endl; } catch (...) { } if (IsEmpty(qs)) { cout << "栈空" << endl; } else { cout << "栈非空" << endl; } return 0;}#endif // 1
1 0
- 两个栈实现一个队列(C/C++)
- 【C++】两个队列实现一个栈
- 【C++】两个栈实现一个队列
- 两个队列实现一个栈&两个栈实现一个队列
- 两个栈实现一个队列-----两个队列实现一个栈
- 两个栈实现一个队列&&两个队列实现一个栈
- 两个栈实现一个队列 && 两个队列实现一个栈
- 两个栈实现一个队列,两个队列实现一个栈
- 两个栈实现一个队列/两个队列实现一个栈
- 两个栈实现一个队列&两个队列实现一个栈
- 两个队列实现一个栈&两个栈实现一个队列
- 两个队列实现一个栈 / 两个栈实现一个队列
- 两个栈实现一个队列,两个队列实现一个栈
- 两个栈实现一个队列&两个队列实现一个栈
- 两个栈实现一个队列&&两个队列实现一个栈
- 两个栈实现一个队列&两个队列实现一个栈
- 两个栈实现一个队列/两个队列实现一个栈
- 两个栈实现一个队列
- struct和 union用 sizeof 看字节对齐
- cuda编程优化1
- Linux设备模型(9)_device resource management
- eclipse向MySQL workbench插入中文显示乱码
- 内联函数
- C++两个栈实现一个队列和两个队列实现一个栈
- 第4课版本定制:Spark Streaming事务处理彻底掌握
- Android开发实现发送短信验证码(使用第三方服务器Bmob)
- Xcode7.3.1中SKAudioNode在Scene转换后无声的问题
- word2013 图片与表格自动更新编号
- C# socket连接断开问题
- Leetcode - Contains Duplicate II
- 这速度 也是醉了
- 如何在调试Window App时,触发 Suspending ,Resuming 等事件