数据结构 优先队列

本文介绍了如何利用C++标准库中的优先队列(priority_queue)进行元素访问,并展示了如何创建自定义类型的优先队列。通过实例展示了在哈夫曼树构建过程中优先队列如何用于计算带权路径长度之和。此外,还讨论了如何对复数集合进行操作。
摘要由CSDN通过智能技术生成

每个元素都被赋予了优先级,访问元素时,只能访问队列中优先级最高的元素。

头文件

#include<queue>

定义

priority_queue<typename> name;

和栈一样,只能通过top()访问最高级元素

#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;

priority_queue<int> myPriorityQueue;

int main(){
	myPriorityQueue.push(20);
	myPriorityQueue.push(100);
	myPriorityQueue.push(30);
	myPriorityQueue.push(50);
	cout<<myPriorityQueue.top()<<endl;//输出100 
	int sum=0;
	while(!myPriorityQueue.empty()){
		sum+=myPriorityQueue.top();
		myPriorityQueue.pop();
	}
	cout<<sum;
}

复数集合 struct自定义类型的优先队列(重载+构造函数)

在这里插入图片描述

类定义

struct Complex{ 
	int real;
	int img;
	Complex(int a,int b):real(a),img(b){}//构造函数 
	bool operator <(Complex c)const{ //重载 
		return real*real+img*img<c.real*c.real+c.img*c.img; 
	}
};

输入方法

else{
			 	int a,b;
			 	scanf("%d+i%d",&a,&b);//格式读入 
			 	mq.push(Complex(a,b));
			 	cout<<"SIZE = "<<mq.size()<<endl; 
			 }

哈夫曼树 给叶子结点权重求带权路径长度之和

带权路径之和即为所有非叶子节点的权值之和。
在这里插入图片描述
优先队列小顶堆的定义方法

priority_queue<typename,vector<typename>,greater<typename>> name;

样例和题解
在这里插入图片描述

#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;



int main(){
	 int n;
	 while(cin>>n){
	 	priority_queue<int,vector<int>,greater<int>> pq;
	 	while(n--){
	 		int x;
	 		cin>>x;
	 		pq.push(x);
		 }
		 int answer=0;
		while(pq.size()!=1){
			int a=pq.top();
			pq.pop();
			int b=pq.top();
			pq.pop();
			answer+=a+b;
			pq.push(a+b);
		}
		cout<<answer;
	 } 
}

同上 哈夫曼树

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值