树——堆的运用
来源:互联网 发布:苹果淘宝app打不开 编辑:程序博客网 时间:2024/05/14 20:32
程序=算法+数据结构。今天所学的是“数据结构”中的“树”。
一、树的定义、特点、一些概念
(1)定义:任意两个节点间有且只有一条路径的无向图。
(2)特点:任意两个节点间有且只有一条路径连接;n个节点有n-1条边;在树中增加一条边会构成回路。
(3)一些概念:根(没有父节点的节点)、父节点、子节点、叶节点(没有子节点的节点)、内部节点、深度(从根到节点的层数)。
二、二叉树
(1)定义:每个节点最多有两个子节点的树。
(2)特殊二叉树:满二叉树(每个内部节点都有两个子节点,即有2^h-1个节点,h为深度);完全二叉树(即最后一层从右向左连续缺少若干个节点,其余各层都是满的)。
(3)应用:堆\并查集。
(4)Tip:可以只用一维数组存储完全二叉树(此时S型穿插,记图)。
三、堆
堆是一种特殊的完全二叉树,分为最小堆和最大堆。最小堆是所有父节点都比子节点要小的完全二叉树,最大堆是所有父节点都比子节点要大的完全二叉树。
1、建立堆
(1)建立最小堆
首先,创建用来存放堆的数组,假如为h[101],堆的大小为n;
接着,读入n个数据到数组h[ ]中;
最后,对这n个数据进行建堆;
代码如下:
#include
int h[101];
int n;
void swap(int x,int y)
{
}
void siftdown(int i)
{
}
void creat()
{
}
int main()
{
}
(2)建立最大堆
2、堆的运用——堆排序
(1)利用最大堆排序
(2)利用最小堆排序
- 树——堆的运用
- 堆结构的运用
- 栈与堆的区别与运用
- 利用优先队列实现堆排序(自顶向下自底向上堆化完全二叉树的运用)
- STL的运用—数列
- 最小的n个和(STL堆的运用)
- 数据结构—堆的学习:堆化数组、堆的插入、堆的删除
- [luogu]P2085最小函数值-堆排的玄学运用
- [luogu]P1631序列合并-堆排的套路运用
- Hibernate——有无注解的运用
- NYOJ104——动态规划的运用
- Android开发——ListView的运用
- js高级——继承的运用
- 实战篇 — 道具的运用
- 黑马程序员—触发器的实例运用
- QTP中DOM的运用—1
- 字典树的运用
- POJ2001Trie树的运用
- 二叉树详解
- 关于scanf和&的问题
- matlab中三维插值函数interp2的使用
- Matlab中数组元素引用——三种方法
- 神的虚妄和宗教的虚伪
- 树——堆的运用
- 关于链表的学习心得
- bitmap算法
- Laravel5.1之文件上传并展示
- 自定义view圆
- static和extern的用法总结
- C语言srand((unsigned)time(NULL))…
- 文件操作
- 位操作