STL标准模板库 --- queue及deque

队列与优先队列的总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lee371042/article/details/81135007

队列

           是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

          队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)

 c++队列queue模板的定义在<queue>头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。

C++队列Queue类成员函数有:

back() 返回最后一个元素

empty() 如果队列空则返回真

front() 返回第一个元素

pop() 删除第一个元素

push() 在末尾加入一个元素

size() 返回队列中元素的个数

例如0-5,共5个元素,我们对其进行入队出队操作:

代码例:

  1. #include<queue>
  2. #include<cstdio>
  3. using namespace std;
  4. int main()
  5. {
  6. queue <int> myQ;
  7. printf("现在队列中元素个数%d\n\n",myQ.size());
  8. for(int i =0; i<5 ; i++)
  9. {
  10. myQ.push(i);//入队
  11. }
  12. for(int i=0; !myQ.empty(); i++)
  13. {
  14. printf("队列剩余元素个数为:%d\n\n",myQ.size());
  15. printf("队列的第一个元素为:%d 队列最后一个元素为:%d\n\n",myQ.front(),myQ.back());
  16. myQ.pop();//出队
  17. }
  18. myQ.push(8);//在队列的最后一位添加一个元素
  19. printf("队列压入的元素为:%d\n",myQ.back());
  20. return 0;
  21. }

输出结果为

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

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

  1. #include<cstdio>
  2. #include<queue>
  3. using namespace std;
  4. int main()
  5. {
  6. priority_queue<int>Q;
  7. for(int i=1;i<=5;i++)
  8. {
  9. int x;
  10. scanf("%d",&x);//压入输入的元素
  11. Q.push(x);
  12. }
  13. for(int i=1;i<=5;i++)
  14. {
  15. printf("优先队列中最大元素为:%d\n\n",Q.top());//由于没有定义优先级,优先队列将按照元素大小来确定优先级
  16. Q.pop();
  17. }
  18. return 0;
  19. }

我们输入乱序的一堆数,在输出的时候我们可以看到,这些数是按照谁最大谁先输出

现在对优先队列进行自定义安排优先级,这里我们自定义了两个队列,它们的优先级相反

代码:

  1. #include<cstdio>
  2. #include<queue>
  3. #include<algorithm>
  4. using namespace std;
  5. struct node
  6. {
  7. int time;
  8. friend bool operator < (node n1, node n2)
  9. {
  10. return n1.time<n2.time;//自定义优先级从大到小
  11. }
  12. } a;
  13. struct node1
  14. {
  15. int time;
  16. friend bool operator <(node1 n1,node1 n2)
  17. {
  18. return n1.time>n2.time;//从小到大
  19. }
  20. } b;
  21. int main()
  22. {
  23. priority_queue<node>Q;
  24. priority_queue<node1>Q1;
  25. int i;
  26. for(i=0; i<5; i++)
  27. {
  28. int x;
  29. scanf("%d",&x);
  30. a.time=x;
  31. b.time=x;
  32. Q.push(a);
  33. Q1.push(b);
  34. }
  35. printf("队列1中优先级输出顺序为:\n");
  36. while(!Q.empty())
  37. {
  38. a=Q.top();
  39. Q.pop();
  40. printf("%d ",a);
  41. }
  42. printf("\n");
  43. printf("队列2中优先级输出顺序为:\n");
  44. while(!Q1.empty())
  45. {
  46. b=Q1.top();
  47. Q1.pop();
  48. printf("%d ",b);
  49. }
  50. return 0;
  51. }

运行结果

posted @ 2019-09-23 20:02  Cherish486  阅读(41)  评论(0编辑  收藏  举报