C++两个队列实现一个栈
C++两个队列实现一个栈
/* * source.cpp * * Created on: 2015年6月21日 * Author: codekiller */ #include "iostream" #include "queue" #include <exception> #include "stdexcept" using namespace std; #define should_not_reach_here template <typename T> class QStack{ public: QStack(void){}; ~QStack(void){}; void push(const T& element); T pop(); private: queue<T> queue1; queue<T> queue2; }; template <typename T> void QStack<T>::push(const T& element){ if(!queue2.empty()) queue2.push(element); else if(!queue1.empty()) queue1.push(element); else if(queue1.empty()&&queue2.empty()) queue1.push(element); } template <typename T> T QStack<T>::pop(){ if(queue1.size()==0&&queue2.size()==0) { throw underflow_error(string("QStack UnderFlow")); //return 0; } if(queue1.size()==0){ while(queue2.size()>1){ queue1.push(queue2.front()); queue2.pop(); } T & dataout=queue2.front(); queue2.pop(); return dataout; }else if(queue2.size()==0){ while(queue1.size()>1){ queue2.push(queue1.front()); queue1.pop(); } T & dataout=queue1.front(); queue1.pop(); return dataout; } should_not_reach_here } int main(){ QStack<int> sstack; sstack.push(1); cout<<sstack.pop()<<endl; sstack.push(100); try{ cout<<sstack.pop()<<endl; cout<<sstack.pop()<<endl; cout<<sstack.pop()<<endl; } catch(underflow_error &err){ cerr<<err.what()<<endl; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!