acm优先队列问题

博客讲述了优先队列在ACM竞赛中的应用,通过两个实例展示了如何使用优先队列解决合并果子和木棍连接问题,以求最小耗费。讨论了如何定义优先级排序,包括默认排序、自定义排序和结构体排序。

队列:队列(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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值