版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第C语言数据结构堆的基本操作实现目录1.基本函数实现a.代码1(向下调整)b.代码2(向上调整)c.代码3(交换)2.建堆
3.插入数据4.删除数据5.获取堆顶的数据6.堆的数据个数7.判空8.打印9.销毁10.测试11.测试结果12.用堆排序(降序)
1.基本函数实现
a.代码1(向下调整)
voidAdjustDown(DateType*a,intn,intparent)
intchild=parent*2+1;
while(childn)
if((child+1)na[child]a[child+1])
++child;
if(a[parent]a[child])
Swap(a[parent],a[child]);
parent=child;
child=parent*2+1;
else
break;
}
注意:if里面的条件语句(child
+1)n是防止越界的,因为不能保证有右孩子。
b.代码2(向上调整)
voidAdjustUp(DateType*a,intchild)
intparent=(child-1)/2;
while(child0)
if(a[child]a[parent])
Swap(a[child],a[parent]);
child=parent;
parent=(child-1)/2;
else
break;
}
注意:while里面的条件语句是不能够写成(parent0),因为当child==0时,parent=(child-1)/2,parent==0,再次进入循环不满足a[child]a[parent],恰好跳出循环。如果写成(a[child]=a[parent])就死循环了
c.代码3(交换)
voidSwap(DateType*p1,DateType*p2)
DateTypetmp=*p1;
*p1=*p2;
*p2=tmp;
}
2.建堆
voidCreatHeap(Heap*p,DateType*num,intn)
assert(p);
p-a=(DateType*)malloc(n*sizeof(DateType));
if(p-a==NULL)
printf("mallocfailed\n");
exit(-1);
memcpy(p-a,num,n*sizeof(DateType));
p-size=n;
p-capacity=n;
//建小堆
for(inti=(n-1-1)/2;ii--)
AdjustDown(p-a,p-size,i);
}
3.插入数据
voidHeapPush(Heap*p,DateTypex)
assert(p);
if(p-size==p-capacity)
DateType*tmp=(DateType*)realloc(p-a,(p-capacity)*2*sizeof(DateType));
if(tmp==NULL)
printf("reallocfailed\n");
exit(-1);
(p-capacity)*=2;
p-a[p-size]=x;
++(p-size);
//向上调整
AdjustUp(p-a,p-size-1);
}
4.删除数据
voidHeapPop(Heap*p,DateTypex)
assert(p);
Swap(p-a[0],p-a[p-size-1]);
--(p-size);
AdjustDown(p-a,p-size,0);
//左右子树还是小堆,直接调整行了
}
把堆顶的数据与最后一个数据交换,再次调整size-1个数据。
5.获取堆顶的数据
DateTypeHeapTop(Heap*p)
assert(p);
returnp-a[0];
}
6.堆的数据个数
intHeapSize(Heap*p)
assert(p);
returnp-size;
}
7.判空
boolHeapIsEmpty(Heap*p)
assert(p);
returnp-size==0;
}
8.打印
voidPrint(Heap*p)
assert(p);
for(inti=0;ip-size;i++)
printf("%d",(p-a)[i]);
printf("\n");
intcount=0;//计数
intlevelsize=1;
for(inti=0;ip-size;i++)
printf("%d",p-a[i]);
++count;
if(count==levelsize)
printf("\n");
levelsize*=2;
count=0;//重新计数
printf("\n");
}
9.销毁
voidHeapDestory(Heap*p)
assert(p);
free(p-
p-a=NULL;
p-capacity=p-size=0;
}
10.测试
intmain()
intnum[]={12,15,17,23,10,25};
intn=sizeof(num)/sizeof(num[0]);
Heapa;
//创建小堆
CreatHeap(a,num,n);
Print(
printf("\n");
//插入数据
HeapPush(a,1);
Print(
//删除对顶的数据
HeapPop(
Print(
printf("\n");
//获取堆顶数据
intret=HeapTop(
printf("Thetopdateis%d\n",ret);
//堆的数据个数
intnumber=HeapSize(
printf("Thenumberofheapis%d\n",number);
//销毁
HeapDestory(
return0;
}
11.测试结果
12.用堆排序(降序)
a.代码1
intmain()
DateTypenum[]={12,1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026汽车制造市场调研及发展技巧与投资回报预测报告
- 2026中国运动安全预警系统人工智能技术融合应用前景报告
- 2026中国涡流泵市场消费需求变化与用户行为调研报告
- 2026汽车零部件行业竞争格局调研与未来发展展望分析研究报告
- 新版教科版六年级上册科学(课件)第4单元 5机械钟摆
- 2026叶黄素酯原料产地资源分布与采购策略研究报告
- 2026中国消费品零售市场发展趋势及商业模式创新与投资前景预测研究报告
- 2026人工智能技术发展市场潜力分析探讨战略规划投资价值评估
- 2026能源监控设备行业市场应用分析评估发展策略研究
- 工业机器视觉技术与应用 课件 第五章-工业机器视觉目标检测与跟踪
- JG/T 478-2015建筑用穿墙防水对拉螺栓套具
- 肌间静脉血栓抗凝治疗
- GB/T 10810.5-2025眼镜镜片第5部分:表面耐磨试验方法
- 《复杂系统理论》课件
- 外出参加护理会议后汇报
- T-CTSS 3-2024 茶艺职业技能竞赛技术规程
- 2023年教育部高中技术课程标准
- 安华农险辽宁省(不含大连)中央财政玉米种植收入保险
- CJT 340-2016 绿化种植土壤
- 高标准农田改造提升建设项目投标方案(技术标)
- 光学成像技术1-课件
评论
0/150
提交评论