zoukankan      html  css  js  c++  java
  • 栈 队列与优先队列

    栈(后进先出)

    1.头文件及声明方式

    中,声明方式:stacks;

    2.入出取栈元素:

    push()和pop()实现元素的入栈和出栈的操作,top()取出栈顶的元素,但是并不删除元素;

    队列

    1.头文件及声明方式


    queues声明

    2.入出取:

    push()和pop()实现元素的入队和出队操作,front()取出队首的元素,但是并不删除;

    优先队列

    1.含义:

    优先队列是一种抽象的数据类型,行为有些像队列,但先出去队列的元素并不是先进队列的元素,而是队列中优先级最高的元素。

    2.头文件及声明方式:

    声明方式:priority_queuepq;其中的pq是一个“越小的整数优先级越低的优先队列”,并且出队列的方法不是front()了,而是top().

    3.例子:

    题目:要实现一个“个位数大的整数优先级反而小”的优先队列。
    分析:定义一个结构体cmp,重载“()”运算符,用"priority_queue<int,vector,cmp>pq"的方式定义。
    下面是cmp的定义:

    struct cmp{
    bool operator()(const int a,const int b) const{//a的优先级比b小的时候返回true
          return a%10>b%10;
          }
    };
    
    

    附加:

    如果是“越小的整数优先级越大的优先队列”则可以写成“priority_queue<int,vector,greater >pq”;注意最后两个“>”符号不要写在一起了;

    优先队列例题:

    题目:丑数是指不能被2 3 5 以外的其他素数整除的数字,把丑数从小到大排列起来,结果如下:1,2,3,4,5,6,8,9,10,12,15,......

    分析:因为最小的丑数是1,而对于任意丑数下x,2x,3x,5x也就都是丑数,所以用一个优先队列保存所有已经生成的丑数,每次取出最小的丑数(这里也就是为什么用的是越小的整数优先级越大的优先队列的原因),但是像12这些数,既可以被2又可以3,所以用集合(每个元素只能出现一次)。

    
            const int aa[3] = { 2,3,5 };
    	typedef long long ll;
    	priority_queue<ll, vector<ll>, greater<ll> >pq;//"越小的整数优先级越大"
    	set<ll>s;
    	pq.push(1);
    	s.insert(1);
    	for (int i = 1;; i++)
    	{
    		ll x = pq.top(); pq.pop();
    		if (i == 7)
    		{
    			cout << x << endl;
    			break;
    		}
    		for (int i = 0; i < 3; i++)
    		{
    			ll x2 = x * aa[i];
    			if (!s.count(x2))
    			{
    				s.insert(x2); pq.push(x2);
    			}
    		}
    	}
    

    作者:Better又
    出处:https://www.cnblogs.com/lwyy1223-/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Flink读取Kafka数据,进行汇总
    Flink集成到CDH上,并运行一个例子
    CDH6.2安装配置第三篇:前台页面配置讲解
    LINUX之ntp时间同步服务配置
    Dubbo+Zookeeper(一)Zookeeper初识
    SpringCloud(五)Zuul网关与分布式配置中心
    SpringCloud(四)Hystrix熔断器
    SpringCloud(三)Ribbon与Feign
    SpringCloud(二)服务注册与发现
    多线程与高并发(六) Lock
  • 原文地址:https://www.cnblogs.com/lwyy1223-/p/13524764.html
Copyright © 2011-2022 走看看