《算法导论》第19章二项堆的实现源代码

本文档提供《算法导论》第19章中二项堆的C++实现源代码,详细讲解了如何使用数据结构struct进行二项堆的null、delete和merge操作。
摘要由CSDN通过智能技术生成

BinormialHeap.h

#ifndef _BINOMAIL_HEAP_H
#define _BINOMAIL_HEAP_H
  
// 定义一个求有符号的无穷大的宏
#define SIGN_INFINITELY_GREAT(T) ((0x1<<8*sizeof(T)-1)-1)
// 定义一个求有符号的无穷小的宏
#define SIGN_INFINITELY_SMALL(T) (1<<(8*sizeof(T)-1))
// 定义INT型的无穷大值
#define INT_INFINITELY_GREATE SIGN_INFINITELY_GREAT(int)
// 定义INT型的无穷小值
#define INT_INFINITELY_SMALL SIGN_INFINITELY_SMALL(int)
// 定义二项堆结点的数据结构
typedef struct _targHeapNode
{
	int		key; //关键字
	int		degree; //度数
	_targHeapNode *parent; //指向父亲
	_targHeapNode *child; //指向第一个孩子
	_targHeapNode *slibing;//指向第右边的兄弟
} HeapNode, *Heap;

#define HEAP_NODE_SIZE sizeof(HeapNode)

Heap make_binomial_heap_with_keys(int keys[], int n); //根据keys创建一个二项堆
Heap make_binomial_heap_with_key(int key); //根据key创建一个二项堆
Heap make_binomial_heap(); //生成一个空Heap,并返回
void binomial_link(Heap &y, Heap &z); //将堆y合并到z中去
Heap binomial_heap_union(Heap &h1, Heap &h2); //将二项堆h1与二项堆h2合并生成新二项堆。原h1与h2被释放,且致零
Heap binoimal_heap_merge(Heap &h1,Heap &h2); //将二项堆h1与二项堆h2合并成按度递增堆,并返回合并后的堆(有可能破坏二项堆性质)。原h1与h2被释放,且致零
void binomial_link(Heap &x, Heap &y); //将二项树x链接到y的第一个子孩子上。其中,x与y结构相同。
Heap binomial_heap_minimum(const Heap h); //找到二项堆的最小关键字结点,并返回
Heap binomial_heap_extract_min(Heap &h); //找到二项树最小结点,并抽出返回
void binomial_heap_decrease_key(Heap h, Heap x, int key); //将指定结点x的关键字降为key
Heap binoimal_heap_delete_with_key(Heap&h, int key);//删除关键字为key的结点
Heap binomial_heap_delete(Heap &h, Heap &x); //删除h中关键字为结点k
Heap binomial_heap_find(const Heap &h, int key); // 找到等
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值