用c++编程:用两个栈实现队列

栈s1和栈s2,栈s1专门为入队,栈s2专门为出队。

入队:

  • 当s1和s2都为空时,直接入队s1。
  • 当s1为空,s2不为空时,把s2的元素都倒回s1,然后再入队s1

出队:

  • 当s2不为空时,直接出队s2
  • 当s2为空且s1不为空时,把s1的元素都倒进s2,然后出队s2

代码实现如下:

#include <iostream>
#include <stack>

using namespace std;

template <class T>
struct Myqueue{ T front() { if(s2.size()==0) { if(s1.size()==0) { cout<<"队列为空"<<endl; return 0; } while(s1.size()>0) { s2.push(s1.top()); s1.pop(); } } return s2.top(); } void pop() { if(s1.size()==0 && s2.size()==0) { cout<<"队列为空"<<endl; } while(s1.size()>0) { s2.push(s1.top()); s1.pop(); } s2.pop(); } void push(T &t) { if(s1.size()==0) { while(s2.size()>0) { s1.push(s2.top()); s2.pop(); } } s1.push(t); } stack<T> s1; stack<T> s2; }; int main(void) { Myqueue<int> myqueue; int flag; int num; int i=0; for(i=0;i<10;i++) myqueue.push(i); for(i=0;i<10;i++) { cout<<myqueue.front()<<" "; myqueue.pop(); } cout<<endl; while(1) { cout<<"请输入要执行的操作,入队或者出队,1为入队,2 为出队,3为打印队头,0为退出"<<endl; cin>>flag; if(flag==1) { cout<<"请输入要增加的结点的值"<<endl; cin>>num; myqueue.push(num); } else if(flag==2) { myqueue.pop(); } else if(flag==3) cout<<"队头结点为:"<<myqueue.front()<<endl; else break; } return 0; }

 程序猿必读

转载于:https://www.cnblogs.com/longzhongren/p/4419030.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值