最大堆的删除

简介: 最大堆的删除
#include <stdio.h>
#include <stdlib.h>
typedef struct heapstruct {
  elementtype *elements;//存放堆元素的数组
  int size;//堆得当前元素个数
  int capacity;//堆的最大容量 
}*maxheap;
maxheap create(int maxsize){//创建容量为maxsize的空的最大堆 
  maxheap h=(maxheap)malloc(sizeof(struct heapstruct));
  h->elements=(elementype)malloc((maxsize+1)*sizeof(elementype));
  h->size=0;
  h->capacity=maxsize;
  h->elements[0]=maxdata;//定义哨兵为最大值方便以后更快操作 
  return h; 
}
//堆的插入
 void insert(maxheap h,elementtype item ){
  int i;
  if(isfull(h)){
    printf("最大堆已满");
    return 0;
   }
   i=++h->size;
   for(;h->elements[i/2]<item;i/=2){
    h->elements[i]=h->elements[i/2];
   }
   h->elements[i]=item;
 } 
 //堆的删除
 elementtype deletemax(maxheap h) {
  int parent,child;//从堆中去除最大值并删除 
  elementtype maxitem ,temp;
  if(isempty(h)){
    printf("最大堆为空\n");
    return 0;
   } 
   maxitem=h->elements[1];//取出根节点最大值
   //用最大堆中的最后一个元素从根节点开始向上过滤下层节点 
   temp=h->elements[h->size--];
   for(parents=1;parent*2<=h->size;parent=child){
    child=parent*2;
    if((child!=h->size)&&(h->elements[child]<h->elements[child+1])){
      child++;//child指向左右子节点的较大者 
     }
     if(temp>=h->elements[child])break;
     else h->elements[parent]=h->elements[child];
     //else目的->移动temp元素到下一层 
   }
   h->elements[parent]=temp;
   return maxitem;
 } 
int main(){
  }
相关文章
堆的介绍与堆的实现和调整
堆的介绍与堆的实现和调整
82 0
|
6月前
|
存储
数据结构学习记录——堆的插入(堆的结构类型定义、最大堆的创建、堆的插入:堆的插入的三种情况、哨兵元素)
数据结构学习记录——堆的插入(堆的结构类型定义、最大堆的创建、堆的插入:堆的插入的三种情况、哨兵元素)
40 2
|
6月前
|
存储 人工智能 程序员
技术心得记录:堆(heap)与栈(stack)的区别
技术心得记录:堆(heap)与栈(stack)的区别
43 0
|
算法
堆的实现以及应用
我们说堆在物理上是一个数组,逻辑上它是一个完全二叉树,我们可以通过它的下标来计算父亲和孩子之间的关系。
|
存储 缓存 Oracle
08-堆(三)
08-堆(三)
82 0
|
存储 缓存 Java
08-堆(一)
08-堆(一)
78 0
|
前端开发 程序员 编译器
|
搜索推荐
堆的应用
堆的应用
145 0
堆的应用