,,,,在二叉树中,我们用两种方法表示二叉树,一个是链表,一个是数组,但是数组比较适用于满二叉树或者完全二叉树。
,,,,堆数据结构是一种数组对象,它可以被视为一棵完全二叉树结构。
,,,,堆结构的二叉树存储有两种方法:
,,,,,,,,最大堆:每个父节点的都大于孩子节点。
,,,,,,,,最小堆:每个父节点的都小于孩子节点。
# include# include # include using namespace 性传播疾病; template 堆class { 公众: 堆()//无参类型的构造函数 {} 堆(T *, size_t 大小)//有参类型的构造函数 { assert (); for (size_t 小姐:=,0;,小姐:& lt;,大小;,我+ +) { _a.push_back([我]); }//建堆,用,向下调整,算法//对于一个完全二叉树,其结点的父子关系与数组的下标的关系://左子下标=,父结点下标* 2 + 1//右子下标=父结点下标* 2 + 2 for (int j =, (_a.size(),安康;2),/,2,,j 祝辞=,0;,j -)//找到倒数第一个非叶子结点(最后一个元素一定是非叶子结点的子节点) { _AdjustDown (j); }/* 在第一次写时定义了j为size_t类型,由于j不管怎么运算都是无符号类型所以 j>=0并没有起到限制的作用,导致了死循环 */} 公众: void 推动(const T , x)//在最后加入一个节点 { _a.push_back (x); _AdjustUp (_a.size(),安康;1);//向上调整,传入最后一个元素下标(调整x的位置) } void Pop()//把最大的删掉(根) { 断言(! _a.empty ()); 交换(_a [0], _a [_a.size(),安康;1]);//把根节点和最后一个节点交换 _a.pop_back();//删掉最后一个节点 _AdjustDown(0);//向下调整 } void Print () { for (size_t 小姐:=,0;,小姐:& lt;, _a.size();,我+ +) { cout & lt; & lt;, _a[我]& lt; & lt;“,”; } cout & lt; & lt;, endl; } size_t 尺寸() { return _a.size (); } bool 空() { return _a.empty (); } 保护: void _AdjustDown (size_t 父母)//时间复杂度O (log2 (N)) { size_t child =, parent *, 2, +, 1,,//找到其左孩子 while (child & lt;, _a.size ()) { if ((时间+ child 1), & lt;, _a.size (),,,, _a(孩子),& lt;, _a [child +, 1])//若左孩子小于右孩子(且必须结点下标不超过范围) { + +孩子;//指向大的 } if (_a(孩子)在_a(父))//若孩子大于父,则把大的放在父结点上 { 交换(_a(孩子),_a(父)); 时间=parent 儿童;//父和子调整后要继续向下调整交换后的子节点 *=child parent 2, +, 1;//现在这个调整后的节点的子节点 } 其他的 打破; } } void _AdjustUp (size_t 孩子)//时间复杂度O (log2 (N)) { size_t parent =, (child 安康;1),/,2; while (child 祝辞,0) { if (_a(孩子),祝辞,_a(父)) { 交换(_a(孩子),_a(父)); 时间=child 家长; parent =, (child 安康;1),/,2; } 其他的 打破; } } 私人: vector 测试函数
void 测试() { int [10],=,{, 5, 10, 34岁,24岁,2,4,17日,23日,12日,9日,}; Heap,,,,上面实现了最大堆,最小堆方法同最大堆,但是再在类中重新一遍则会使程序的可维护性降低,所以我们用来实现。
,
仿函数
<代码类=" cpp字大胆"> struct 代码>,<代码类=" cpp平原"> 代码>自由<代码类=癱pp平原”>{代码>,,,,<代码类=癱pp空间”>,代码> <代码类=" cpp字大胆">空白代码>,<代码类=癱pp平原”>操作符()(代码> <代码类=" cpp字大胆">空白代码>,<代码类=癱pp平原”> * ptr) 代码>,,,<代码类=癱pp空间”>,,代码> <代码类=癱pp平原”>{代码>,<代码类=癱pp空间”>,,,,代码> <代码类=" cpp功能大胆">免费
堆的结构分析与应用