美文网首页
双栈模拟队列

双栈模拟队列

作者: 熊白白 | 来源:发表于2017-07-08 20:05 被阅读70次

编写一个类,只能用两个栈结构实现队列,支持队列的基本操作(push,pop)。
其实动手写一下,也很容易知道这个过程:

  • 一个栈inS用于压入数据,另一个栈outS用于弹出数据
  • 压入时直接压入
  • 弹出时若栈不为空,则弹出;否则将inS中所有的值挨个弹出并压入outS中。然后从outS弹出元素。
class TwoStack {
public:
    stack<int> inS,outS;
    void push(int n){
        inS.push(n);
    }
    
    int pop(){
        if(outS.empty()){
            while(!inS.empty()){
                int t=inS.top();
                inS.pop();
                outS.push(t);
            }
        }
        int t=outS.top();
        outS.pop();
        return t;
    }
}

扩展:用两个队列模拟栈。
其实用一个队列就可以做到。那么:

  • 压入时:压入到队列尾
  • 弹出时:依次从队列头弹出元素,然后压入对尾。直至弹出原来处于队尾的元素。

相关文章

网友评论

      本文标题:双栈模拟队列

      本文链接:https://www.haomeiwen.com/subject/xqejhxtx.html