代码随想录(day9)——栈和队列

(最容易的一集,没啥太多注意事项)

Leetcode.225 用队列实现栈:

225. 用队列实现栈 - 力扣(LeetCode)

 对于栈,其特点是后进先出。对于队列,其特点是先进先出,例如对于下面图中的栈和队列:

在各自出元素时,栈弹出的元素为3,队列弹出的元素是1。在本题中,需要利用队列来模拟实现栈的若干功能,分别为:

push:将元素压入栈顶。

pop:移除并返回栈顶元素

top:返回栈顶元素

empty:探空

对于push,直接利用队列中的接口push向队列中插入元素即可。例如:需要向队列中压入元素4

对于pop,由于需要返回并移除的栈顶元素正是队列中的最后一个,因此,让队列中的前n-1个元素依次插入到最后一个元素后,此时最后一个元素变成了队列中的第一个元素,即:

由于题目需要移除并且返回这个元素,因此先创建一个变量result来存储队列中的第一个元素,随后,利用pop删除这个元素。最后返回result即可。

对于top,直接利用队列中的接口back,返回即可。

对应代码如下:
 

class MyStack {
public:
    
    queue<int> In;
   
    MyStack() {

    }
    
    void push(int x) {
        In.push(x);


    }
    
    int pop() {

        int size = In.size();
        size--;
        while(size--)
        {
            In.push(In.front());
            In.pop();
        }

        int result = In.front();
        In.pop();
        return result;

    }
    
    int top() {

        return In.back();


    }
    
    bool empty() {
        return In.empty();

    }
};

Leetcode.232 用栈实现队列:

232. 用栈实现队列 - 力扣(LeetCode)

对于本题,需要利用两个栈来模拟实现队列,此处分别命名为Inout。对于In,用于接收元素,并且向out中插入元素。对于out,用于向外弹出元素。例如对于上题中的队列,如果需要让队列弹出元素,弹出的元素应该为1

但是对于栈来说,其弹出的元素为3,因此,可以利用上面的方法,创建两个栈,二者之间的关系如下图所示:

Inout中弹入元素:

在题目中,要求实现的接口也有四个:

push:将元素推至队列末尾

pop:从队列开头移除并返回元素

peek:返回队列开头的元素

empty:探空

对于push,依旧直接调用栈中的push即可。

对于pop,首先检查out是否为空,如果为空,则让In中的元素全部弹入到out中。随后依旧创建变量result保存栈弹出的元素,随后利用pop删除栈顶元素。最后返回result即可。

对于peek,可以先复用pop,同时创建变量result用于接收pop的返回值,将result插入到栈中,最后返回result即可。对应代码如下:
 

class MyQueue {
public:

    stack<int> In;
    stack<int> out;
    MyQueue() {

    }
    
    void push(int x) {
        In.push(x);

    }
    
    int pop() {

        if(out.empty())
        {
            while(!In.empty())
            {
                out.push(In.top());
                In.pop();
            }
        }

        int result = out.top();
        out.pop();
        return result;

    }
    
    int peek() {

        int result = this->pop();
        out.push(result);

        return result;

    }
    
    bool empty() {

        return In.empty() && out.empty();

    }
};

相关推荐

  1. 代码随想 队列

    2024-03-30 14:54:02       49 阅读

最近更新

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

    2024-03-30 14:54:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-30 14:54:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-30 14:54:02       87 阅读
  4. Python语言-面向对象

    2024-03-30 14:54:02       96 阅读

热门阅读

  1. Golang基础-6

    2024-03-30 14:54:02       41 阅读
  2. Spring中 Bean生命周期总结

    2024-03-30 14:54:02       43 阅读
  3. baseDao增删改查.

    2024-03-30 14:54:02       41 阅读
  4. 探讨Spring Boot的自动配置原理

    2024-03-30 14:54:02       53 阅读