首页 > 编程语言 >【算法训练营day10】理论基础 LeetCode232. 用栈实现队列 LeetCode225. 用队列实现栈

【算法训练营day10】理论基础 LeetCode232. 用栈实现队列 LeetCode225. 用队列实现栈

时间:2022-10-21 14:12:30浏览次数:68  
标签:LeetCode225 LeetCode232 队列 元素 pop int push empty

【算法训练营day10】理论基础 LeetCode232. 用栈实现队列 LeetCode225. 用队列实现栈

理论基础

栈常用函数

#include <stack>
stack<int> s;
s.empty();       // 如果栈为空则返回true,否则返回false
s.size();        // 返回栈中元素的个数
s.top();         // 返回栈顶元素,但不删除该元素
s.pop();         // 弹出栈顶元素,但不返回该元素值
s.push();        // 将元素压入栈顶

队列常用函数

#include <queue>
queue<int> q;
q.empty();       // 如果队列为空则返回true,否则返回false       
q.size();        // 返回队列中元素的个数
q.front();       // 返回队首元素,但不删除该元素
q.back();        // 返回队尾元素,但不删除该元素 
q.pop();         // 弹出队首元素,但不返回该元素值
q.push();        // 将元素压入队尾

LeetCode232. 用栈实现队列

题目链接:232. 用栈实现队列

初次尝试

今天的两道题用来复习栈与队列的基础知识的,没有太多的思考量,直接看题解复习。

看完代码随想录后的想法

思路不难,用两个栈屁股对屁股即可实现一个队列的功能,需要注意的就是:

  1. 队列中的某个元素不会同时存在于在stIn和stOut中,只会存在于其中一个栈。
  2. 栈的pop()函数并不会返回弹出的元素值,所以需要保存弹出的元素值时,先用top()再用pop()即可。
class MyQueue {
public:
    stack<int> stIn;
    stack<int> stOut;

    MyQueue() {
    }
    
    void push(int x) {
        stIn.push(x);
    }
    
    int pop() {
        if (stOut.empty()) {
            while (!stIn.empty()) {
                stOut.push(stIn.top());
                stIn.pop();
            }
        }
        int result = stOut.top();
        stOut.pop();
        return result;
    }
    
    int peek() {
        int result = this -> pop();
        stOut.push(result);
        return result;
    }
    
    bool empty() {
        return stIn.empty() && stOut.empty();
    }
};

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue* obj = new MyQueue();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->peek();
 * bool param_4 = obj->empty();
 */

LeetCode225. 用队列实现栈

题目链接:225. 用队列实现栈

初次尝试

直接看题解复习。

看完代码随想录后的想法

仅用一个队列就可以实现栈,实现栈pop的思路为:在栈需要pop的时候,把队列除队尾元素之前的所有元素都依次pop,然后重新push进队列,这个时候队首的元素即为栈需要pop的元素。

class MyStack {
public:
    queue<int> que;

    MyStack() {
    }
    
    void push(int x) {
        que.push(x);
    }
    
    int pop() {
        for (int i = 0; i < que.size() - 1; i++) {
            que.push(que.front());
            que.pop();
        }
        int result = que.front();
        que.pop();
        return result;
    }
    
    int top() {
        return que.back();
    }
    
    bool empty() {
        return que.empty();
    }
};

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack* obj = new MyStack();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->top();
 * bool param_4 = obj->empty();
 */

标签:LeetCode225,LeetCode232,队列,元素,pop,int,push,empty
From: https://www.cnblogs.com/BarcelonaTong/p/16813239.html

相关文章

  • 代码随想录第十天 | 232.用栈实现队列, 225. 用队列实现栈
    第十天今天开始学习stack相关232.用栈实现队列classMyQueue{Stack<Integer>in;Stack<Integer>out;publicMyQueue(){in=newStack<>(......
  • 《MiniPRO H750开发指南》第六十三章 UCOSII实验3-消息队列、信号量集和软件定时器
    第六十三章UCOSII实验3-消息队列、信号量集和软件定时器​上一章,我们学习了如何使用UCOSII的信号量和邮箱的使用,本章,我们将学习消息队列、信号量集和软件定时器的使用。​......
  • JavaScript实现数据结构 -- 队列
    队列队列是一个先进先出的数据结构。JS模拟队列虽然JavaScript中没有队列,但是我们可以用数组来实现队列的功能。 //用数组来模拟队列 constqueue=[]; //入队 q......
  • BlockingQueue阻塞队列
    BlockingQueue阻塞队列BlockingQueue的四组API/**BlockQueue的四组API*1.抛出异常*2.有返回值,不抛出异常*3.阻塞等待*4.超时等待*/publicclassBlockQu......
  • 单调队列&单调栈
    队列给你一个左右开口的容器,左进右出,可以知道先进去的一定先出来,所以可以用他的一些性质来实现一些操作,比如bfs就需要用到队列。手写队列比较麻烦,这里贴一下代码自行体会......
  • 单调队列&单调栈
    队列给你一个左右开口的容器,左进右出,可以知道先进去的一定先出来,所以可以用他的一些性质来实现一些操作,比如bfs就需要用到队列。手写队列比较麻烦,这里贴一下代码自行体会......
  • springcloud学习记录day4 -- 消息队列RubbitMQ
    同步通信和异步通信微服务间通讯有同步和异步两种方式:同步通讯:就像打电话,需要实时响应。异步通讯:就像发邮件,不需要马上回复。同步通信我们之前学习的Feign调用就属于......
  • Vue—关于响应式(二、异步更新队列原理分析)
    本节需要准备知识点:EventLoop、Promise关于EventLoop介绍参考阮一峰老师的文章:http://www.ruanyifeng.com/blog/2013/10/event_loop.htmlhttps://www.ruanyifeng.com......
  • C语言之走迷宫深度和广度优先(利用堆栈和队列)
     完成以下迷宫 利用二维数组储存每一个数组里的值,若是不能走则为1,若是可行就是0,走过了就设为2。一般是再复制一个数组,用来记录。堆栈的思想就是将一个点的上下左右......
  • 顺序队列
    顺序队列:在顺序队列中有queueElem,front,rear,maxSizequeueElem代表队列的存储空间front代表队首的位置rear代表队尾的位置的下一个位置。maxSize代表最多放存储个数。......