玩转数据结构 (第六、七章 集合和映射、优先队列和堆)

本文介绍了数据结构中的集合和映射概念,映射被视为集合的一种特殊情况。接着讲解了优先队列和堆,其中优先队列在动态场景下更具优势。堆是一种完全二叉树,其元素的值总是不大于其父节点。堆的常见操作包括添加元素(Sift Up)、取出最大元素(Sift Down)以及替换元素(Replace)。最后,讨论了如何将任意数组转换为堆(Heapify)及其时间复杂度。
摘要由CSDN通过智能技术生成

映射也是一个集合
集合相当于映射value为空的时候

堆和优先队列
普通队列:先进先出;后进后出
优先队列:出队和入队顺序无关,和优先级有关(因为动态,所以使用优先队列比较合理)

二叉堆是一颗完全二叉树(
不一定是满二叉树(满二叉树:除了叶子结点,其他节点都不为空);
最后一层从左到右放置,右下角有可能是空的;
堆中某个节点的值总是不大于其父亲节点的值;
堆中某个节点的值总是不大于其父亲节点的值;
最大堆(相应可以定义最小堆);
堆中层次低的不一定大于层次高的值,没有直接关系,只能确定小于其父亲节点的值

Array类的添加

public Array(E[] arr){
   
		
	}

public class MaxHeap<E extends Comparable<E>>{
   
	private Array<E> data;
	public MaxHeap(int capacity){
   
		data = new Array<>(capacity);
	}
	public MaxHeap(){
   
	data = new Array();
	}
	//返回堆中的元素个数
	public int size(){
   
		return data.getSize();
	}
	//返回一个布尔值,表示堆中是否为空
	public Boolean isEmpty(){
   
		return data.isEmpty();
	}
	//返回完全二叉树的数组表示,一个索引所表示的元素的父亲点的索引
	private int parent(int index){
   
		if (index ==
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值