数据结构--堆的实现(Go)

本文介绍了堆数据结构,特别是最大堆和最小堆,并探讨了它们在查找最大值或最小值场景下的高效性。堆是一种完全二叉树,通常用数组表示,允许O(1)的删除操作和不超过树高度的插入操作。文章还分享了作者使用Golang实现堆的代码,邀请读者提供指导和评论。
摘要由CSDN通过智能技术生成

参考文档

谢谢这两位博主,两位博主写的很好,我看了很久,自己总结的记录如下。

堆 堆排序 优先队列 图文详解(Golang实现)
最大堆,最小堆实现

我们经常需要从一组对象中查找前N大值或小值。当然我们可以每次都先排序,然后再进行查找,但是这种做法效率很低。那么有没有一种特殊的数据结构,可以高效率的实现我们的需求呢,答案就是堆(heap)。Delete的复杂度为O(1),Insert不大于树的高度。

介绍

  1. 堆的最小值或最大值在根节点上,所以可以快速找到最大值或最小值。
  2. 堆是一棵完全二叉树,所以我们可以用顺序结构来存储它,用一个数组表示,不需要指针,所以效率更高。
  3. 当用数组表示时,数组中任一位置i上的元素,其左儿子(如果存在)在位置2i上,右儿子(如果存在)在位置(2i + 1)上,其父节点在位置(i/2)上。

实现(Go)

我的目录

我是小白,欢迎指导

堆实现代码(我是小白,求指导)

package heap

import (
	"fmt"
	"math"
)

//二叉堆是一种特殊的堆,它满足两个性质:结构性和堆序性
//结构性:二叉堆是一颗完全二叉树,完全二叉树可以用一个数组表示,不需要指针,所以效率更高。
//堆序性质:堆的最小值或最大值在根节点上,所以可以快速找到最大值或最小值。
//当用数组表示时,数组中任一位置i上的元素,其左儿子在位置2i上,右儿子在位置(2i+ 1)上,其父节点在位置(i/2)上。

type Interface interface {
   
	Len(heap *MaxHeap) int
	swap(i, j int)
	Bigger(i, j int) bool
	Insert(value int)
	Delete()
}

//Define MaxHeap
type MaxHeap struct {
   
	Element []int
}

// New a Heap
func NewHeap() *MaxHeap {
   
	//math.MinInt64 --> Integer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值