队列:先进先出,即插入数据在队尾进行,删除数据在队头进行;
栈:后进先出,即插入与删除数据均在栈顶进行。
两个栈实现一个队列的思想:用pushStack栈作为推动数据的栈,用popStack栈作为流行数据的栈。
引用><李>只要是对队列进行推操作,就将数据推入pushStack栈中。李> <李>要实现队列的流行操作,有二点原则,如果popStack为空的话那么我们就将pushStack所有的元素放到popStack中,然后取popStack栈顶元素就是队列的队头,如果popStack不为空的话,我们就直接获取popStack的栈顶元素。李> <李>对于顶级操作来说和流行操作类似,只是最后一步不用流行了。李>
# include & lt; iostream> # include & lt; stack> # include & lt; exception> template<类T>类MyQueue { 公众: 空推(const T&num);//入队列 T pop ();//出队列 T前(); 私人: std:: stack
pushStack; std:: stack popStack; }; template 空白MyQueue T MyQueue T MyQueue ::高级(){ 如果(pushStack.empty () & & popStack.empty()){//如果二个栈都为空 把std:: runtime_error(队列为空); }else if (popStack.empty()){//如果popStack为空,将pushStack全部元素倒popStack 而(! pushStack.empty ()) { T数据=https://www.yisu.com/zixun/pushStack.top ();//获取pushStack栈顶元素 pushStack.pop ();//出栈 popStack.push(数据); } 其他}{//如果popStack不为空的话直接返回popStack栈顶 T数据=popStack.top (); 返回数据; } } int main () { MyQueue myQueue1; myQueue1.push (1); myQueue1.push (2); myQueue1.push (3); myQueue1.push (4); std:: cout <暗鼻傲餍?“& lt; & lt;myQueue1.pop () & lt; & lt;std:: endl; std:: cout & lt; & lt;“当前流行的方法是:“& lt; & lt;myQueue1.pop () & lt; & lt;std:: endl; std:: cout & lt; & lt;“当前流行的方法是:“& lt; & lt;myQueue1.pop () & lt; & lt;std:: endl; std:: cout & lt; & lt;“当前流行的方法是:“& lt; & lt;myQueue1.pop () & lt; & lt;std:: endl; std:: cout & lt; & lt;“当前流行的方法是:“& lt; & lt;myQueue1.pop () & lt; & lt;std:: endl; 返回0; }
<李>用两个栈实现一个队列——我作为面试官的小结李> <李> c++之用两个栈实现一个队列李>
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
c++利用两个栈实现队列的方法