[Easy] leetcode-225/232 栈和队列的相互实现

一、用栈实现队列

1、题目

        仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 

实现 MyQueue 类:

void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false

2、解答

class MyQueue {
private:
    //双栈
    stack<int> inStack, outStack;
    void in2out() {
        while (!inStack.empty()) {
            outStack.push(inStack.top());
            inStack.pop();
        }
    }
public:
    MyQueue() {

    }
    
    void push(int x) {
        inStack.push(x);
    }
    
    int pop() {
        if (outStack.empty()) {
            in2out();
        }
        int x = outStack.top();
        outStack.pop();
        return x;
    }
    
    int peek() {
        if (outStack.empty()) {
            in2out();
        }
        return outStack.top();
    }
    
    bool empty() {
        return outStack.empty() && inStack.empty();
    }
};

二、用队列实现栈

1、题目

        仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。

实现 MyStack 类:

void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

2、解答

class MyStack {
private:
    queue<int> queue1;
    queue<int> queue2;

public:
    MyStack() {

    }
    //在push时就放好了顺序,后来的数据放在队列1的前端,pop时候直接取front即可
    void push(int x) {
        queue2.push(x);
        while(!queue1.empty()) {
            queue2.push(queue1.front());
            queue1.pop();
        }
        swap(queue1, queue2);
    }
    
    int pop() {
        int x = queue1.front();
        queue1.pop();
        return x;
    }
    
    int top() {
        int x = queue1.front();
        return x;
    }
    
    bool empty() {
        return queue1.empty() && queue2.empty();
    }
};

相关推荐

  1. 数据结构9:相互实现

    2024-05-12 20:40:02       28 阅读
  2. [Easy] leetcode-225/232 相互实现

    2024-05-12 20:40:02       34 阅读
  3. 转换

    2024-05-12 20:40:02       34 阅读
  4. 应用场景

    2024-05-12 20:40:02       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-12 20:40:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-12 20:40:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-12 20:40:02       87 阅读
  4. Python语言-面向对象

    2024-05-12 20:40:02       96 阅读

热门阅读

  1. 力扣 139. 单词拆分 python AC

    2024-05-12 20:40:02       33 阅读
  2. MATLAB数值计算工具箱介绍

    2024-05-12 20:40:02       34 阅读
  3. Linux 系统中,nl命令用于计算文件中的行号

    2024-05-12 20:40:02       34 阅读
  4. C++进阶——浅谈隐式转化

    2024-05-12 20:40:02       33 阅读
  5. 简述Redis过期策略及内存淘汰机制

    2024-05-12 20:40:02       36 阅读
  6. golang中三种线程安全的MAP

    2024-05-12 20:40:02       33 阅读
  7. SQL多表查询

    2024-05-12 20:40:02       30 阅读
  8. c++ 和c回调混合的一种实现

    2024-05-12 20:40:02       29 阅读
  9. Liunx软件包管理(上)

    2024-05-12 20:40:02       25 阅读