232.用栈实现队列 and 225用队列实现栈

基础题,没啥好说的。唯一需要注意的是栈弹出在入栈会改变顺序,队列不会。

class MyQueue {
public:

    stack<int> m_stIn;
    stack<int> m_stOut;

    MyQueue() {
        
    }
    
    void push(int x) {
        m_stIn.push(x);
    }
    
    int pop() {
        if( m_stOut.empty() )
        {
             while( !m_stIn.empty() )
            {
                m_stOut.push( m_stIn.top() );
                m_stIn.pop();
            }
        }

        int temp = m_stOut.top();
        m_stOut.pop();
        return temp;
    }
    
    int peek() {
         if( m_stOut.empty() )
        {
             while( !m_stIn.empty() )
            {
                m_stOut.push( m_stIn.top() );
                m_stIn.pop();
            }
        }
        
        return m_stOut.top();
    }
    
    bool empty() {
        return m_stIn.empty() && m_stOut.empty();
    }
};
class MyStack {
public:
    queue<int> m_queIn;
    queue<int> m_queOut;

    MyStack() {
        
    }
    
    void push(int x) {
        m_queIn.push(x);
    }
    
    int pop() {

        int size = m_queIn.size();
        size--;//只弹出size-1个
        while( size-- )
        { 
            m_queOut.push( m_queIn.front() );
            m_queIn.pop();
        }

        int temp = m_queIn.front();
        m_queIn.pop();

        m_queIn = m_queOut;
        while( !m_queOut.empty() )
            m_queOut.pop();

        return temp;
    }
    
    int top() {

        int size = m_queIn.size();
        size--;//只弹出size-1个
        while( size-- )
        { 
            m_queOut.push( m_queIn.front() );
            m_queIn.pop();
        }

        int temp = m_queIn.front();
        m_queOut.push(temp);
        m_queIn.pop();

        m_queIn = m_queOut;
        while( !m_queOut.empty() )
            m_queOut.pop();

        return temp;
    }
    
    bool empty() {
        return m_queIn.empty() && m_queOut.empty();
    }
};
posted @ 2025-03-03 19:33  名字好难想zzz  阅读(14)  评论(0)    收藏  举报