队列与优先队列的总结

队列总结

(一)队列

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

补充

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

全部评论

相关推荐

05-21 18:32
已编辑
湖南工学院 Java
这条干货多数是给i人朋友们分享的,知道你们开不了口,可以试试我说的这些方法1.调整心态:接受初期的尴尬刚开始进入一个新环境,双方都属于一个认识对方的过程,尴尬瞬间是难免存在的。首先,你要接受尴尬,允许自己犯错,实习期本身就是来学习的,同事也不会期待你完美无缺。另外,不要太以自我为中心,其实你的尴尬瞬间也许没有人在意,是因你的对自己的关注而放大了不安全感。2.准备一些防止尴尬的话题和工作相关的,可以以请教的方式开启。比如:xx,这个表格我没有看懂,可以给我讲一下吗非工作的话题,可以聊聊中午吃什么、当地的天气如何、通勤远不远之类的。比如:附近有什么好吃的外卖吗?我刚来还不太熟悉3.每日练习,逐渐打...
sweep^0416:内向人,遇到好的领导很重要,我之前一段实习组里全e人就我一个i 刚入职第一周还会带着我聊一下,后面越来越冷落我,实在受不了,每天去到就想亖,mentor还要pua说是我融入不了集体(我真的以为是我的问题)后面我离职了,去了现在这一家公司,我的领导也是e人,但是我融入的很好,组里的人全都很好很好,也不会出现小团体什么的,所以说内向不是不融入环境的根本,就是公司跟带教的问题
点赞 评论 收藏
分享
程序员小假:人才
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务