栈和队列

[Algo] 栈和队列

1. 栈实现队列

// 1. 栈实现队列
class MyQueue
{
private:
    stack<int> in;
    stack<int> out;
public:
    void enQueue(int val)
    {
        in.push(val);
        inToOut();
    }
    void deQueue()
    {
        out.pop();
        inToOut();
    }
    int top()
    {
        if (empty()) return -1;
        else return out.top();
    }
    bool empty()
    {
        return in.empty() && out.empty();
    }
    int size()
    {
        return in.size() + out.size();
    }
private:
    void inToOut()
    {
        // 条件1: out为空  条件2: in中全部元素
        if (out.empty())
        {
            while (!in.empty())
            {
                out.push(in.top());
                in.pop();
            }
        }
    }
};

2. 队列实现栈

// 2. 队列实现栈
class MyStack 
{
private:
    queue<int> q;
public:
    void push(int val)
    {
        q.push(val);
        for (int i = 0; i < size() - 1; i++)
        {
            q.push(top());
            q.pop();
        }
    }
    void pop()
    {
        q.pop();
    }
    int top()
    {
        if (empty()) return -1;
        else return q.front();
    }
    bool empty()
    {
        return q.empty();
    }
    int size()
    {
        return q.size();
    }
};

3. 最小栈

// 3. 最小栈
class MinStack
{
private:
    stack<int> s;
    stack<int> min;
public:
    void push(int val)
    {
        if (s.empty() || val <= min.top()) min.push(val);
        else min.push(min.top());
        s.push(val);
    }
    void pop()
    {
        s.pop();
        min.pop();
    }
    int top()
    {
        if (s.empty()) return -1;
        else return s.top();
    }
    int min()
    {
        if (min.empty()) return -1;
        else return min.top();
    }
    bool empty()
    {
        return s.empty();
    }
    int size()
    {
        return s.size();
    }
};
posted @ 2024-12-05 17:54  yaoguyuan  阅读(3)  评论(0编辑  收藏  举报