• 栈 队列与优先队列


    栈(后进先出)

    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-/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    质心坐标(barycentric coordinates)及其应用
    用表存储代替递归算法
    Lua学习之加载其他lua文件
    Mac 端配置 Lua 环境
    聊聊二手房交易遇到的恶心事
    Mac安装Python3后,如何将默认执行的Python2改为Pyhton3
    Mac平台下部署UE4工程到iOS设备的流程
    计算椭圆运动轨迹的算法
    OpenGL中的渲染方式—— GL_TRIANGLE_STRIP
    XDRender_ShaderMode_StandardPBR 间接光照(2)-镜面反射部分(1)
  • 原文地址:https://www.cnblogs.com/lwyy1223-/p/13524764.html
Copyright © 2020-2023  润新知