编程珠玑: 14章 堆 14.2实现一个优先级队列,返回数组中最小值 -------解题总结

本文介绍了如何用C++实现一个优先级队列,特别是使用小顶堆的数据结构来保证插入和查找最小元素的时间复杂度为O(logN)。文章通过一个模板类`MyPriorityQueue`展示了插入、提取最小元素和检查队列是否为空等基本操作,并提供了完整的代码示例。
摘要由CSDN通过智能技术生成
#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;
/*
问题:实现一个优先级队列,支持插入元素和返回最小元素操作
分析:优先级队列保证插入和返回最小值元素的时间复杂度都是O(logN),假设有n个元素,每个元素插入在堆中的时间复杂度为O(logN)
      所以堆排序的总时间复杂度为O(NlogN)
优先级队列:说白了就是小顶堆的变体。

输入:
输入:
12(数组元素个数)
19 51 26 40 35 22 17 23 29 15 20 12
输出:
12(最小元素)

关键:
1 优先级队列注意使用模板
//优先级队列:包含最大元素个数,支持插入和提起最小元素
template<class T>
class MyPriorityQueue
{
public:
	MyPriorityQueue(int maxSize)
	{
		//需要new出maxSize+1个元素
		_maxSize = maxSize;
		x = new T[_maxSize + 1];
		n = 0;
	}

2 优先级队列保证插入和返回最小值元素的时间复杂度都是O(logN),假设有n个元素,每个元素插入在堆中的时间复杂度为O(logN)
      所以堆排序的总时间复杂度为O(NlogN)
优先级队列:说白了就是小顶堆的变体。
*/

//优先级队列:包含最大元素个数,支持插入和提起最小元素
template<class T>
class MyPriorityQueue
{
public:
	MyPriorityQueue(int maxSize)
	{
		//需要new出maxSize+1个元素
		_maxSize = maxSize;
		x = new T[_maxSize + 1];
		n &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值