首页 > 其他分享 >栈和队列

栈和队列

时间:2024-12-05 18:12:56浏览次数:4  
标签:return val 队列 int size empty out

[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();
    }
};

标签:return,val,队列,int,size,empty,out
From: https://www.cnblogs.com/yaoguyuan/p/18589090

相关文章

  • 实现一个ajax的队列请求
    classAjaxQueue{constructor(){this.queue=[];this.isRunning=false;}add(request){this.queue.push(request);this.run();}run(){if(this.isRunning||this.queue.length===0){return;}this.isRu......
  • 消息队列-kafka
    消息队列-kafkakafka常见面试题kafka实践环境准备代码结果截图参考摘要:本文将会对kafka进行介绍,首先介绍消息队列的一些基础知识,然后是kafka的基本概念和底层原理,以及kafka如何保证消息可靠性、消息不丢失,如何解决消息重复以及消息积压等问题,并且分析kafka为什么具......
  • c++ 环形队列(RingBuffer)
    环形缓冲区(CircularBuffer)与环形队列类似,是一种数据结构,支持在固定容量下的高效读写操作。相比队列,环形缓冲区通常允许覆盖旧数据,这在某些场景(如实时数据流、日志处理)中非常有用。实现步骤核心变量:缓冲区数组buffer[]:存储数据。读指针head:指向下一个读取的位置。写指......
  • rt-thread学习之路第三十四章--设备IPC之工作队列
    目录workqueue简介workquque结构体介绍workqueue接口介绍初始化工作项使用系统工作队列创建销毁工作队列提交工作项取消工作项示例代码workqueue简介工作队列(workqueue)是一种转移任务执行环境的工具,例如当系统产生一个中断时,我们可以在中断处理函数里做一些紧......
  • 说说栈和队列的区别是什么?
    栈和队列都是常用的数据结构,它们的区别主要在于元素的添加和删除顺序:栈(Stack):遵循LIFO(Last-In,First-Out)原则,就像一叠盘子,最后放上去的盘子最先被拿走。在前端开发中,栈常用于:函数调用栈:JavaScript引擎使用栈来管理函数调用,每次调用函数都会将函数的执行上下......
  • LabVIEW 队列消息处理器设计
    LabVIEW队列消息处理器设计队列消息处理器升级模式详解队列状态机学习概述队列状态机函数获取队列引用函数元素入队列函数元素出队列函数队列最前端插入元素函数释放队列引用函数队列消息处理器基本结构队列消息处理器升级模式详解当我们需要动态地根据用户的输入......
  • python学习笔记(15)算法(8)双向队列
    在队列中,我们仅能删除头部元素或在尾部添加元素。双向队列(double‑endedqueue)提供了更高的灵活性,允许在头部和尾部执行元素的添加或删除操作。一、双向队列常用操作队首入队(push_front):在双向队列的头部添加一个元素。队首出队(pop_front):删除双向队列头部的元素。队尾入队(push......
  • 数据结构第一弹-队列
    大家好,今天和大家一起分享一下数据结构中的队列相关内容~队列是一种非常重要的线性数据结构,遵循先进先出(FIFO,FirstInFirstOut)的原则。一、队列概述队列是一种特殊的线性表,它只允许在一端进行插入操作,在另一端进行删除操作。队列的入口称为队尾(rear),出口称为队头(front)。......
  • 【消息队列】RabbitMq-声明队列与交换机
    通过Spring配置,Bean注入的形式依赖配置<!--AMQP依赖,包含RabbitMQ--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency>yaml文件配置spring:rabbitmq:host:......
  • 1201-用栈实现最小队列
    最小栈leetcode232.题目大意:仅使用两个栈实现一个队列,要求实现push、pop、peek、empty解题思路:栈和队列刚好想法,队列是先进先出,设定a队列正常存放,b队列存放倒序,push的操作正常存放进a队列,pop的操作需要倒序,peek也需要倒序,将判断方法放置于peek中,peek操作不会操作具体队列,需要......