标题2020 - 1024 == 996
你品,你细品
堆、栈、队列
1. 大根堆小根堆
大根堆 堆顶的元素是最大的,越往下越小
小根堆 堆顶的元素是最小的,越往下越大
大根堆小根堆的声明:
priority_queue <int, vector<int>, greater<int> > xiaogen; priority_queue <int, vector<int>, less<int> > dagen;
2. 栈
栈有两种基本操作,push() ,pop()操作
push()是放进去元素,pop是取出元素,top()可以获取顶端的元素
栈是一种先进后出的数据结构
举个例子来说的话,更像是筒装可比克薯片(吃货实锤 ),只能获取顶端的或者是从顶端放进去
3. 队列
是一种先进先出的数据结构,两种基本操作是push() , pop(),push是从队列的尾端操作,每次pop是放出元素,从队列的顶端。
他的顶端在最开始的开头部分
队列最实际的例子就是现实生活中的队列
4. 优先队列 priority_queue
大根堆和小根堆其实就是一种优先队列,也有其他类型的优先队列,比如队列中套用结构体这种类型,就要用下面的方式进行声明和定义
struct node{
struct node{ int a; int b; friend bool operator < (const node& x,const node& y){ return x.a < y.a; } }; priority_queue<node> que;
因为优先队列要有一定的顺序性,所以就要有一定的排序规则在里面,这就要求用到重载运算符的方式来约束排序的规则 若按照以下的方式进行输入:
1 2 2 3 3 2 1 6 2 8
那么对应的输出就是:
3 2 2 8 2 3 1 6 1 2
==顶上的元素和想要的排序是正好相反的==