赞
踩
用队列实现栈就是当输出元素时,就把这个元素之前的元素全部出队再入队,完成后进先出的实现。
只用一个队列也能实现,这里的q2是备用队列。
class MyStack { private: queue<int> q1; queue<int> q2; public: MyStack() { } void push(int x) { q1.push(x); } int pop() { int size=q1.size(); size--; while(size--){ q2.push(q1.front()); q1.pop(); } int res=q1.front(); q1.pop(); q1=q2; while(!q2.empty()) q2.pop(); return res; } int top() { return q1.back(); } bool empty() { return q1.empty(); } };
用队列实现栈就是用两次先进后出完成先进先出,一个栈是输入栈,一个栈是输出栈。
这里要注意的是,只要完成的是输出操作,就一定要把输入栈的元素全部转移到输出栈中,否则容易出现顺序错误。
class MyQueue { public: stack<int> stin; stack<int> stout; MyQueue() { } void push(int x) { stin.push(x); } int pop() { if(stout.empty()){ while(!stin.empty()){ stout.push(stin.top()); stin.pop(); } } int res=stout.top(); stout.pop(); return res; } int peek() { int res=this->pop();//函数直接调用 stout.push(res);//只查询,再给放回去 return res; } bool empty() { return stin.empty() && stout.empty(); } };
今天的题比较基础,休息一下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。