栈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; }
时间: 2024-11-02 10:57:08