数据结构——堆

重点:堆基础操作与堆相关算法思路。(仅个人学习记录,若有错误,感谢指正)

1、前言

熟练运用堆数据结构需要掌握的重点:

1、堆数据结构的定义

2、从上往下调整堆操作

3、从下往上调整堆操作

例如:

1、初始化堆:通过循环将每一个元素进行“从上往下调整

2、堆排序:通过循环一次读取堆顶元素,并用最后一个元素代替,然后进行“从上往下调整

3、插入元素:将元素插入堆,然后对新插入的元素进行从下往上调整,等等等。

所以,堆基础概念的理解以及熟练掌握堆基础操作对堆的灵活运动十分重要‼️

2、代码实现 

1、堆数据结构定义

堆的数据结构 

//数据结构定义
struct heap{
datatype data[MAX_NUMBBEr];
int size;
}

2、从下往上调整(大顶堆为例)

//从上往下调整,大顶堆为例
void adjustDown(struck heap* heap,int index,int size){
  if(heap == NULL)
    return;
  //当索引指向叶子节点退出
  while(index <= (heap->size-2)/2){
    int left = 2*index+1,right = 2*index+2, temp;
    //因为索引不指向叶子节点,所以必有左孩子
    int max = heap[index]<heap[left]?left:index;
    max = right<size&&heap[max]<heap[right]?right:max;
    if(max == index) break;
    else{
      temp = heap[index];
      heap[index] = teap[max];
      temp[max] = temp;
      index = max;
    }
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值