0
点赞
收藏
分享

微信扫一扫

队列与优先队列的总结


目录

  • ​​队列总结​​
  • ​​(一)队列​​
  • ​​(二)优先队列​​
  • ​​优先队列的优先级​​
  • ​​补充​​
  • ​​有关优先队列的具体详情请移步 [大佬的博客]​​​

队列总结

(一)队列

  • 是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
  • 队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)
  • c++队列queue模板类的定义在头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。
  • C++队列Queue类成员函数有:
  • back() 返回最后一个元素
  • empty() 如果队列空则返回真
  • front() 返回第一个元素
  • pop() 删除第一个元素
  • push() 在末尾加入一个元素
  • size() 返回队列中元素的个数
    附上代码希望能帮助你理解。
    代码:

#include <queue>
#include <cstdio>
using namespace std;
int main(){
queue < int > l;
printf("现在队列中的元素个数%d\n\n",l.size());

for(int i=1;i<=10;i++)
l.push(i);

while(!l.empty())
{
printf("队列中的元素个数:%d\n\n",l.size());
printf("队列的第一个元素为:%d 队列中的最后一个元素为: %d\n\n",l.front(),l.back());
l.pop();
}

return 0;
}

队列与优先队列的总结_#include

(二)优先队列

C++优先队列类似队列,但是在这个数据结构中的元素按照一定顺序排列。

  • 成员函数有:
    1.empty() 如果优先队列为空,则返回真
    2.pop() 删除第一个元素
    3.push() 加入一个元素
    4.size() 返回优先队列中拥有的元素的个数
    5.top() 返回优先队列中有最高优先级的元素

注意:优先级不一定是从大到小,或从小到大。用friend 函数来确定

例代码:

#include <cstdio>
#include <queue>
using namespace std;
int main(){
priority_queue<int> l;
for(int i=1;i<=5;i++)
{
int x;
scanf("%d",&x);
l.push(x);
}

for(int i=1;i<=5;i++)
{
printf("优先队列中最大元素为:%d\n\n",ltop());
l.pop();
}
return 0;
}

队列与优先队列的总结_优先级_02

  • 优先队列相当于内部有sort 函数 ,所以遇见需要一步一排序的可以使用优先队列。

优先队列的优先级

代码:

#include <cstdio>
#include <queue>
using namespace std;

struct node {
int time;
friend bool operator <(node x,node y)
{
return x.time>y.time;//优先级从小到大
}
}b;

struct node1{
int time;
friend bool operator <(node1 a,node1 b){
return a.time<b.time;//优先级从大到小
}
}a;

int main(){
priority_queue<node1> l;
priority_queue<node> k;

for(int i=1;i<=5;i++)
{
int x;
scanf("%d",&x);
a.time=x;
b.time=x;
l.push(a);
k.push(b);
}

printf("优先队列中优先级输出顺序为:\n\n");
while(!l.empty()){
a=l.top();
l.pop();
printf("%d ",a);
}
printf("\n");

printf("优先队列的优先级输出顺序为: \n\n");
while(!k.empty()){
b=k.top();
k.pop() ;
printf("%d ",b);
}

return 0;
}

队列与优先队列的总结_#include_03


注意$也就是priority_queue< *** > l;

这个这个类型也要与结构体对应起来。

补充

有关优先队列的具体详情请移步大佬的博客


举报

相关推荐

0 条评论