Binomial heaps 的实现和分析

时间:2012-07-23 03:02:55
【文件属性】:

文件名称:Binomial heaps 的实现和分析

文件大小:883KB

文件格式:RAR

更新时间:2012-07-23 03:02:55

二项堆 二项树 Binomial heaps

1、抽象数据类型定义如下: 本程序主要定义了两个类,一个用于创建节点,另一个用于创建二项堆。 class BinomialHeapNode { public: int key; //节点的关键字的值 int degree; //节点的度 BinomialHeapNode* sibling; //节点的右兄弟节点 BinomialHeapNode* child; //节点的最最孩子节点 BinomialHeapNode* father; //节点的双亲节点 BinomialHeapNode(int newkey) ; //构造函数,以关键字创建节点 BinomialHeapNode(); //重载构造函数,默认关键字为0 }; class BinomialHeap { public: typedef BinomialHeapNode node_t; private: static BinomialHeap heapMerge(BinomialHeap& heapA, BinomialHeap& heapB) ; //将两个二项堆按照根的度的递增顺序构成一个新的二项堆 static void nodeLink(node_t* child, node_t* father) ; //将两个节点连接成二项树 public: node_t* head; //二项堆的头节点 BinomialHeap(); //构造函数,头结点为0 { head = 0 } BinomialHeap(node_t& node) //构造函数,以一个节点进行构造 { head = &node; } BinomialHeap(node_t* node) //构造函数,以一个节点进行构造 { head = node; } BinomialHeap(const BinomialHeap& src) //构造函数,以一个二项堆进行构造 { head = src.head; } inline void insertNode(node_t& node) ; //在堆中插入一个节点 void insertNode(node_t* node) ; //在堆中插入一个节点 node_t* Find_Min(); //查找关键字值最小的节点 node_t* Extract_Min(); //查找并删除关键字值最小的节点 static BinomialHeap heapUnion(BinomialHeap& heapA, BinomialHeap& heapB) ; //合并两个二项堆 node_t*Findnode(int key) ; //查找关键字为key的节点 inline void swapkey(node_t* source,node_t*target ) ; //交换两个节点的关键字的值 void decreaseKey(int key,int newkey) ; //减小关键字为key的节点的值为newkey void traverse(); //遍历二项堆 void DeleteNode(int key) ; //删除关键字为key的节点 };


【文件预览】:
二项堆操作
----二项堆操作.dsp(4KB)
----二项堆操作.cpp(10KB)
----二项堆操作.plg(254B)
----二项堆操作.opt(53KB)
----二项堆操作.ncb(41KB)
----Debug()
--------vc60.pdb(108KB)
--------vc60.idb(81KB)
--------二项堆操作.pdb(1.05MB)
--------二项堆操作.exe(524KB)
--------二项堆操作.ilk(771KB)
--------二项堆操作.obj(268KB)
--------二项堆操作.pch(1.91MB)
----二项堆操作.dsw(545B)

网友评论

  • 思路比较清晰,但是程序中的注释较少 还是可以看懂的,建议有一定基础知识的人来看