目录
队列总结
(一)队列
-
是一种特殊的线性表,特殊之处在于它只允许在表的前端(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;
}
(二)优先队列
C++优先队列类似队列,但是在这个数据结构中的元素按照一定顺序排列。
- 成员函数有:
1.empty() 如果优先队列为空,则返回真
2.pop() 删除第一个元素
3.push() 加入一个元素
4.size() 返回优先队列中拥有的元素的个数
5.top() 返回优先队列中有最高优先级的元素
<mark>注意:优先级不一定是从大到小,或从小到大。用friend 函数来确定</mark>
例代码:
#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;
}
- 优先队列相当于内部有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;
}
<mark>注意</mark> 定义队列时 队列的类型$也就是priority_queue< *** > l;
这个这个类型也要与结构体对应起来。