c++队列及优先队列

淩亂°似流年 2023-10-21 06:27 270阅读 0赞

队列

特点:先进先出,可形成有序的结构,运用于算法设计;

常用操作:

  1. Cpp:
  2. queue<int> q; //定义;
  3. q.empty(); //如果队列为空返回true,否则返回false
  4. q.size(); //返回队列中元素的个数
  5. q.pop(); //删除队列首元素但不返回其值
  6. q.front(); //返回队首元素的值,但不删除该元素
  7. q.push(); //在队尾压入新元素
  8. q.back(); //返回队列尾元素的值,但不删除该元素

优先队列

特点:按照键值的大小排队,stl里的用大小根堆来实现,

  1. /*优先队列的基本使用 2010/7/24 dooder*/
  2. #include<stdio.h>
  3. #include<functional>
  4. #include<queue>
  5. #include<vector>
  6. using namespace std;
  7. //定义结构,使用运算符重载,自定义优先级1
  8. struct cmp1{
  9. bool operator ()(int &a,int &b){
  10. return a>b;//最小值优先
  11. }
  12. };
  13. struct cmp2{
  14. bool operator ()(int &a,int &b){
  15. return a<b;//最大值优先
  16. }
  17. };
  18. //定义结构,使用运算符重载,自定义优先级2
  19. struct number1{
  20. int x;
  21. bool operator < (const number1 &a) const {
  22. return x>a.x;//最小值优先
  23. }
  24. };
  25. struct number2{
  26. int x;
  27. bool operator < (const number2 &a) const {
  28. return x<a.x;//最大值优先
  29. }
  30. };
  31. int a[]={14,10,56,7,83,22,36,91,3,47,72,0};
  32. number1 num1[]={14,10,56,7,83,22,36,91,3,47,72,0};
  33. number2 num2[]={14,10,56,7,83,22,36,91,3,47,72,0};
  34. int main()
  35. { priority_queue<int>que;//采用默认优先级构造队列
  36. priority_queue<int,vector<int>,cmp1>que1;//最小值优先
  37. priority_queue<int,vector<int>,cmp2>que2;//最大值优先
  38. priority_queue<int,vector<int>,greater<int> >que3;//注意“>>”会被认为错误,
  39. //这是右移运算符,所以这里用空格号隔开
  40. priority_queue<int,vector<int>,less<int> >que4;最大值优先
  41. priority_queue<number1>que5;
  42. priority_queue<number2>que6;
  43. int i;
  44. for(i=0;a[i];i++){
  45. que.push(a[i]);
  46. que1.push(a[i]);
  47. que2.push(a[i]);
  48. que3.push(a[i]);
  49. que4.push(a[i]);
  50. }
  51. for(i=0;num1[i].x;i++)
  52. que5.push(num1[i]);
  53. for(i=0;num2[i].x;i++)
  54. que6.push(num2[i]);
  55. printf("采用默认优先关系:\n(priority_queue<int>que;)\n");
  56. printf("Queue 0:\n");
  57. while(!que.empty()){
  58. printf("%3d",que.top());
  59. que.pop();
  60. }
  61. puts("");
  62. puts("");
  63. printf("采用结构体自定义优先级方式一:\n(priority_queue<int,vector<int>,cmp>que;)\n");
  64. printf("Queue 1:\n");
  65. while(!que1.empty()){
  66. printf("%3d",que1.top());
  67. que1.pop();
  68. }
  69. puts("");
  70. printf("Queue 2:\n");
  71. while(!que2.empty()){
  72. printf("%3d",que2.top());
  73. que2.pop();
  74. }
  75. puts("");
  76. puts("");
  77. printf("采用头文件\"functional\"内定义优先级:\n(priority_queue<int,vector<int>,greater<int>/less<int> >que;)\n");
  78. printf("Queue 3:\n");
  79. while(!que3.empty()){
  80. printf("%3d",que3.top());
  81. que3.pop();
  82. }
  83. puts("");
  84. printf("Queue 4:\n");
  85. while(!que4.empty()){
  86. printf("%3d",que4.top());
  87. que4.pop();
  88. }
  89. puts("");
  90. puts("");
  91. printf("采用结构体自定义优先级方式二:\n(priority_queue<number>que)\n");
  92. printf("Queue 5:\n");
  93. while(!que5.empty()){
  94. printf("%3d",que5.top());
  95. que5.pop();
  96. }
  97. puts("");
  98. printf("Queue 6:\n");
  99. while(!que6.empty()){
  100. printf("%3d",que6.top());
  101. que6.pop();
  102. }
  103. puts("");
  104. return 0;
  105. }

常用操作:

  1. priority_queue<int,vector<int>,cmp1> que; //声明,que参照上面用法;
  2. que.empty(); //判断是否为空
  3. que.size(); //队列长度;
  4. que.push(); //插入;
  5. que.pop(); //删除;
  6. que.top(); //查询;

发表评论

表情:
评论列表 (有 0 条评论,270人围观)

还没有评论,来说两句吧...

相关阅读

    相关 c++之string~优先队列

    优先队列是一种很好的数据结构,熟练运用它很多题目都能够很容易的解决。 首先优先队列头文件 \include <queue> 优先队列默认出队列的是最大元素。 定义有两种方

    相关 队列优先队列

    队列 队列是一种特殊的[线性表][Link 1],特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作

    相关 优先队列

    优先队列:顾名思义,首先它是一个队列,但是它强调了“优先”二字,所以,已经不能算是一般意义上的队列了,它的“优先”意指取队首元素时有一定的选择性,即根据元素的属性选择某一项值最

    相关 优先队列

    [为什么80%的码农都做不了架构师?>>> ][80_] ![hot3.png][] 优先队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。