队列总结

(一)队列

  • 是一种特殊的线性表,特殊之处在于它只允许在表的前端(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;
这个这个类型也要与结构体对应起来。

补充

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