双栈队列实现快速获取队列最大值最小值

1 思路:

自己实现一个栈,其中成员为标准库中的栈,一个存放全部的元素,一个存放最小元素,一个存放最大元素。

使用自己实现的栈来实现一个求最大值最小值的队列,其中包含两个成员,一个作为出队的栈,一个作为入队的栈。

 

2 C++实现代码:

#include<iostream>
#include<stack>
#include<cstdlib>
using namespace std;

template <typename T>
class minmaxStack
{
public:
    bool empty()
    {
        return st.empty();
    }
    size_t size()
    {
        return st.size();
    }
    void push(int x)
    {
        if(minStack.empty()||x<minStack.top())
            minStack.push(x);
        if(maxStack.empty()||x>maxStack.top())
            maxStack.push(x);
        st.push(x);
    }
    void pop()
    {
        if(st.empty())
            return;
        if(st.top()==minStack.top())
            minStack.pop();
        if(st.top()==maxStack.top())
            maxStack.pop();
        st.pop();
    }
    int getMin()
    {
        if(st.empty())
            return -1;
        return minStack.top();
    }
    int getMax()
    {
        if(st.empty())
            return -1;
        return maxStack.top();
    }
    int top()
    {
        return st.top();
    }
private:
    stack<int> st;
    stack<int> minStack;
    stack<int> maxStack;
};

template<typename T>
class myqueue
{
public:
    bool empty()
    {
        return in.empty()&&out.empty();
    }
    size_t size()
    {
        return in.size()+out.size();
    }
    int getMax()
    {
        if(in.empty()&&out.empty())
            return -1;
        if(in.empty())
            return out.getMax();
        if(out.empty())
            return in.getMax();
        return max(in.getMax(),out.getMax());
    }
    int getMin()
    {
        if(in.empty()&&out.empty())
            return -1;
        if(in.empty())
            return out.getMin();
        if(out.empty())
            return in.getMin();
        return min(in.getMin(),out.getMin());
    }
    void push(int x)
    {
        in.push(x);
    }
    void pop()
    {
        if(in.empty()&&out.empty())
            return;
        if(out.empty())
        {
            while(!in.empty())
            {
                out.push(in.top());
                in.pop();
            }
        }
        out.pop();
    }
private:
    minmaxStack<int> in;
    minmaxStack<int> out;
};

int main()
{
    myqueue<int> q;
    for (int i = 0; i < 15; i++)
    {
        int index=rand()%100;
        cout<<index<<' ';
        q.push(index);
    }
    cout<<q.getMax()<<endl;
    cout<<q.getMin()<<endl;
}

 

时间: 2024-10-29 12:35:07

双栈队列实现快速获取队列最大值最小值的相关文章

python-rabbitmq获取队列名以及队列长度队列消费者个数

问题描述 rabbitmq获取队列名以及队列长度队列消费者个数 如题,我需要对rabbitmq监控,定时获取节点上的所有队列名 队列长度(消息个数) 以及消费者个数,用python 做,有没哪位能给个办法,或者说那个python有这个功能, pika amqplib 解决方案 RabbitMQ之队列与消息持久化RabbitMQ之队列与消息持久化

数据结构Java实现07----队列:顺序队列&amp;顺序循环队列、链式队列、顺序优先队列

一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列. 下图是一个依次向队列中插入数据元素a0,a1,...,an-1后的示意图: 上图中,a0是当前 队头数据元素,an-1是当前 队尾数据元素. 为了

说说Android的广播(2) - 并发队列和串行队列

并发队列和串行队列 前面我们讲了,消息分为普通消息和有序消息两大类.普通消息是可以并发的,由于是并发的,这些广播的处理者之间互相是不依赖的. 另外,并发队列和串行队列都各维护了一条后台广播队列和前台广播队列.如果这个消息足够重要,想走快速通道的话,可以选择使用前台广播队列. 对于并发队列,如果是进程活着,动态注册到队列里的,系统会通过并发的方式迅速将消息广播出去,就跟大家所想象的一样. 但是如果需要通过启动新进程才能处理消息的情况,为了避免同时启动大量进程,系统还是采用串行的方式来处理的.后面我

并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法(转)

在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出).Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在实际应用中要根据实际需要选用阻塞队列或者非阻塞队列. 注:什么叫线程安全?这个首先要明确.线程安全就是说多线程访问同一代码,不会产生不确定的结果. 并行和并发区别 1.并行是指两者同时执行一件事,比如赛跑,两个人都在不停的

PHP的Laravel框架中使用消息队列queue及异步队列的方法_php实例

queue配置 首先说明一下我之前的项目中如何使用queue的. 我们现在的项目都是用的symfony,老一点的项目用的symfony1.4,新一点的项目用的都是symfony2.symfony用起来整体感觉还是很爽的,尤其symfony2,整体上来讲使用了很多java里面框架的设计思想.但是他不支持queue.在symfony,我们使用queue也经历了几个过程.最开始使用张堰同学的httpsqs.这个简单使用,但是存在单点.毕竟我们的项目还是正式对外服务的,所以我们研究了Apache旗下的开

巧用淘宝店快速获取大量外链揭秘

大家都知道获取外链的方式各式各样,但是今天追风给大家分享这个是我分析朋友网站的外链结构后发现的快速增加外链的方法--"淘宝店快速获取大量外链"前段时间有一个朋友叫我帮他分析下他们的网站,是一个做网上商城+淘宝结合的模式.他们的站是今年5月份的站点.要优化商业性比较强的词,而老板本身也不懂seo的,而这个叫我帮他的分析的朋友也不懂seo,据说网站之前有专门的seo专员优化过.不过走了.我就帮他分析了他们的网站,发现百度反向链接有1万多条,整体关键词的排名都在好几百名以外. 过了一个多月,

打入搜索引擎内部快速获取流量SEO百度平台营销

百度自己产品的权重都是非常高的这个不用多说,那么我们怎么利用他的高权重,进行流量的转换呢?下面跟着我的思路,一步步的解析,如何利用百度平台进行快速获取流量: 1 SEO百度平台营销之百度百科营销 百度百科,百度百科词条的编辑需要一定的技术这个今天暂且跳过.百度百科一旦编辑成功,排名是相当好 的. 优点:排名快.排名好. 缺点:编辑需要一定技术 难加入链接(百度百科等级越高越好通过很加链接) 2 SEO百度平台营销之百度知道营销 百度知道,本人认为百度知道的门槛就要比百科要低,操作简单,自问自答方

SEO人员如何快速获取准确的关键字

关键字是SEO人员最重要的一份资料,凡是做SEO的人员,都会对关键字这块备受推崇,可以说关键字的好坏决定了网站的流量和排名.获取关键字的方法也有很多种,我们一起来聊聊,关于如何快速获取准确的关键字. 1.软件法 软件法是指利用现有的一些软件,对关键字进行抓取,目前有很多相关的软件,都能提供关键词的挖掘功能.但是通过这类软件挖掘,会产生有部分不太准确的现象.因此挖的到词,还需要进行分析和统计,比如分析的他的百度指数,以及去比对相关网站的排名,这样得出来的词才能准确性. 2.分析法 分析法,主是通过

实战分析快速获取有效外链资源的两种方式

其实现在有很多的地方都可以获取外链,但是还是有很多的朋友在问怎么获取外链资源,有哪些地方可以发外链,徐国祥其实前面分享过很多的外链资源,其中海多外链资源V4这个软件里面包含了各种各样的外链资源,以及无需审核的29个交换链接平台都可以算作外链资源,但是很多朋友反应海多软件里面很多的资源都已经失效了,而且也不能保证收录,那么怎么样才能快速获取有效外链资源,这里徐国祥和大家分享下自己如何快速获取的有效外链资源的二种方式: 1.分析其他的网站的外链资源 这个我相信大家都会,而且我们一般都是去分析竞争对手