栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【数据结构入门

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【数据结构入门

原题链接:Leetcode 232. Implement Queue using Stacks

Implement a first in first out (FIFO) queue using only two stacks. The implemented queue should support all the functions of a normal queue (push, peek, pop, and empty).

Implement the MyQueue class:

  • void push(int x) Pushes element x to the back of the queue.
  • int pop() Removes the element from the front of the queue and returns it.
  • int peek() Returns the element at the front of the queue.
  • boolean empty() Returns true if the queue is empty, false otherwise.

Notes:

You must use only standard operations of a stack, which means only push to top, peek/pop from top, size, and is empty operations are valid.
Depending on your language, the stack may not be supported natively. You may simulate a stack using a list or deque (double-ended queue) as long as you use only a stack’s standard operations.

Example 1:

Input
["MyQueue", "push", "push", "peek", "pop", "empty"]
[[], [1], [2], [], [], []]
Output
[null, null, null, 1, 1, false]

Explanation
MyQueue myQueue = new MyQueue();
myQueue.push(1); // queue is: [1]
myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
myQueue.peek(); // return 1
myQueue.pop(); // return 1, queue is [2]
myQueue.empty(); // return false

Constraints:

  • 1 <= x <= 9
  • At most 100 calls will be made to push, pop, peek, and empty.
  • All the calls to pop and peek are valid.

Follow-up:

Can you implement the queue such that each operation is amortized O(1) time complexity? In other words, performing n operations will take overall O(n) time even if one of those operations may take longer.


方法一:模拟 思路:

栈是先入后出的,队列是先入先出的。
用两个栈(输入栈和输出栈)通过倒转输入的序列来实现队列

c++代码:
class MyQueue {
private:
    // 一个输入栈 一个输出栈
    stack inStack, outStack;

    // 将输入栈的元素依次添加到输出栈中
    void transfer() {
        while (!inStack.empty()) {
            outStack.push(inStack.top());
            inStack.pop();
        }
    }

public:
    MyQueue() {}

    // 入队
    void push(int x) {
        inStack.push(x);
    }

    // 出队
    int pop() {
        if (outStack.empty()) {
            transfer();
        }
        int x = outStack.top();
        outStack.pop();
        return x;
    }

    // 返回队头元素
    int peek() {
        if (outStack.empty()) {
            transfer();
        }
        return outStack.top();
    }

    // 判断是否为空
    bool empty() {
        return inStack.empty() && outStack.empty();
    }
};


复杂度分析:
  • 时间复杂度:
  • 空间复杂度:
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001102.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号