左倾堆(二)之 C++的实现
2014-04-09 08:50
2211 查看
概要
上一章介绍了左倾堆的基本概念,并通过C语言实现了左倾堆。本章是左倾堆的C++实现。目录
1. 左倾堆的介绍
2. 左倾堆的图文解析
3. 左倾堆的C++实现(完整源码)
4. 左倾堆的C++测试程序
转载请注明出处:https://www.geek-share.com/detail/2608004600.html
更多内容:数据结构与算法系列 目录
(01) 左倾堆(一)之 图文解析 和 C语言的实现
(02) 左倾堆(二)之 C++的实现
(03) 左倾堆(三)之 Java的实现
左倾堆的介绍
左倾堆(leftist tree 或 leftist heap),又被成为左偏树、左偏堆,最左堆等。它和二叉堆一样,都是优先队列实现方式。当优先队列中涉及到"对两个优先队列进行合并"的问题时,二叉堆的效率就无法令人满意了,而本文介绍的左倾堆,则可以很好地解决这类问题。
左倾堆的定义
/** * C 语言: 左倾堆 * * @author skywang * @date 2013/11/07 */ #include <iostream> #include "LeftistHeap.h" using namespace std; int main() { int i; int a[]= {10,40,24,30,36,20,12,16}; int b[]= {17,13,11,15,19,21,23}; int alen=sizeof(a)/sizeof(a[0]); int blen=sizeof(b)/sizeof(b[0]); LeftistHeap<int>* ha=new LeftistHeap<int>(); LeftistHeap<int>* hb=new LeftistHeap<int>(); cout << "== 左倾堆(ha)中依次添加: "; for(i=0; i<alen; i++) { cout << a[i] <<" "; ha->insert(a[i]); } cout << "\n== 左倾堆(ha)的详细信息: " << endl; ha->print(); cout << "\n== 左倾堆(hb)中依次添加: "; for(i=0; i<blen; i++) { cout << b[i] <<" "; hb->insert(b[i]); } cout << "\n== 左倾堆(hb)的详细信息: " << endl; hb->print(); // 将"左倾堆hb"合并到"左倾堆ha"中。 ha->merge(hb); cout << "\n== 合并ha和hb后的详细信息: " << endl; ha->print(); // 销毁 ha->destroy(); return 0; }
View Code
左倾堆的C++测试程序
左倾堆的测试程序已经包含在它的实现文件(LeftistHeapTest.cpp)中了,这里仅给出它的运行结果:== 左倾堆(ha)中依次添加: 10 40 24 30 36 20 12 16 == 左倾堆(ha)的详细信息: 10(2) is root 24(1) is 10's left child 30(0) is 24's left child 36(0) is 24's right child 12(1) is 10's right child 20(0) is 12's left child 40(0) is 20's left child 16(0) is 12's right child == 左倾堆(hb)中依次添加: 17 13 11 15 19 21 23 == 左倾堆(hb)的详细信息: 11(2) is root 15(1) is 11's left child 19(0) is 15's left child 21(0) is 15's right child 13(1) is 11's right child 17(0) is 13's left child 23(0) is 13's right child == 合并ha和hb后的详细信息: 10(2) is root 11(2) is 10's left child 15(1) is 11's left child 19(0) is 15's left child 21(0) is 15's right child 12(1) is 11's right child 13(1) is 12's left child 17(0) is 13's left child 16(0) is 13's right child 23(0) is 16's left child 20(0) is 12's right child 40(0) is 20's left child 24(1) is 10's right child 30(0) is 24's left child 36(0) is 24's right child
相关文章推荐
- c++ UrlEncode 实现
- 单例模式及C++实现代码
- C++ 多态性的实现方式
- 种子填充算法描述及C++代码实现
- 数据挖掘作业——FP Tree算法之C++实现
- 单例模式及C++实现代码
- 用thrift实现客户端和服务端的C++代码 - 金美光的小屋 - 博客频道 - CSDN.NET
- 我所理解的设计模式(C++实现)——观察者模式(Observer Pattern)
- C++实现静态链表
- C++回调机制实现(转)
- C++ 搬水果贪心算法实现代码
- C++模板与泛型(2.实现自己的Queue类模板)
- Observer (C++实现)
- c++单例实现
- 说反话(c++实现)
- c++实现堆排序及运行实例结果
- C++第六周任务5:解决用一个项目多个文件的方式实现,其中两个类的声明放在一个.h文件中,每个类的成员函数分别放一个文件,main()函数用一个文件。体会这样安排的优点。
- C++ string.split实现
- 【编程题目】合并两个排序链表(C++实现)
- C++模板实现双向链表