队列:队列(Queue)与栈一样,是一种线性存储结构,它具有如下特点:
(1)队列中的数据元素遵循“先进先出”(First In First Out)的原则,简称FIFO结构;
(2)在队尾添加元素,在队头删除元素。
队列的常用函数包括以下几种
操作名称 | 作用 |
---|---|
q.top() | 返回队列的第一个元素的值但不删除该元素 |
q.pop() | 删除队列的第一个元素但不返回其值 |
q.push(x) | 向队列里压入元素(是向对尾插入元素) |
q.size() | 返回队列元素个数 |
q.empty() | 判断队列元素个数(和数组的sizeof()原理类似) |
q.front() | 返回队列的第一个的元素 |
q.back() | 返回队列最后一个进入的元素 |
掌握了队列的基本操作以后就可进一步学习深层次的优先队列:
优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的。在优先队列中所有元素都是已经被所定义的优先顺序排列好而形成的队列。下面介绍如何定义对队列内部排序的方法。
方法一:
priority_queue q1;//默认从大到小排序,整数中元素大的优先级高
其中中的int是指被排序的数据类型,队列相对数组排序强势在于能对各种数据类型进行排序,不局限与整型排序。
方法二:
#include<iostream>
#include<queue>
using namespace std;
priority_queue<int> q1;//默认从大到小排
int main()
{
int n;
cin>>n;
int t;
for(int i=1;i<=n;i++)
{
cin>>t;
q1.push(t);
}
while(!q1.empty())
{
cout<<q1.top()<<" ";
q1.pop();
}
return 0;
}
下列是我修改成为对double类型数据进行排序的程序:
#include<iostream>
#include<queue>
using namespace std;
priority_queue<double> q1;//默认从大到小排序
int main()
{
int n;
cin>>n;
double t;
for(int i=