首页 > 代码库 > careercup-栈与队列 3.5
careercup-栈与队列 3.5
3.5 实现一个MyQueue类,该类用两个栈来实现一个队列。
解答
队列是先进先出的数据结构(FIFO),栈是先进后出的数据结构(FILO), 用两个栈来实现队列的最简单方式是:进入队列则往第一个栈压栈, 出队列如果第二个栈不为空,则直接从第二个栈出队列,否则将第一个栈的数据依次压入第二个栈,然后出栈。每次有数据进入队列,直接进入第一个栈; 每次有数据出队列,在第二个栈不为空时直接从第二个栈出队。
C++实现代码:
#include<iostream>#include<stack>using namespace std;class MyQueue{private: stack<int> s1; stack<int> s2;public: void push(int x) { s1.push(x); } void pop() { if(s1.empty()&&s2.empty()) return; if(s2.empty()&&!s1.empty()) { while(!s1.empty()) { s2.push(s1.top()); s1.pop(); } s2.pop(); } else s2.pop(); } int front() { if(s1.empty()&&s2.empty()) return 0; if(!s2.empty()) return s2.top(); while(!s1.empty()) { s2.push(s1.top()); s1.pop(); } return s2.top(); } int size() { return s1.size()+s2.size(); } bool empty() { return s1.empty()&&s2.empty(); }};int main(){ MyQueue q; for(int i=0; i<10; ++i) { q.push(i); } cout<<q.front()<<endl; q.pop(); q.push(10); cout<<q.front()<<endl; cout<<q.size()<<" "<<q.empty()<<endl; return 0;}
careercup-栈与队列 3.5
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。