斜堆--C语言实现
来源:互联网 发布:linux mysql详解 编辑:程序博客网 时间:2024/05/21 17:42
skewheap.h
#ifndef _SKEWHEAP_H_#define _SKEWHEAP_H_#define Insert(X,H) (H=Insert((X),H))struct TreeNode;typedef struct TreeNode *PriorityQueue;typedef int ElementType;PriorityQueue Initialize();ElementType FindMin(PriorityQueue H);int IsEmpty(PriorityQueue H);PriorityQueue Merge(PriorityQueue H1, PriorityQueue H2);PriorityQueue Insert1(ElementType X, PriorityQueue H);PriorityQueue DeleteMin(PriorityQueue H);#endif
skewheap.c
#include<stdio.h>#include<stdlib.h>#include"skewheap.h"struct TreeNode{ ElementType Element; PriorityQueue Left; PriorityQueue Right;};PriorityQueue Initialize(){ PriorityQueue H; H = (PriorityQueue)malloc(sizeof(TreeNode)); if (H == NULL) { printf("FAILURE!\n"); exit(EXIT_FAILURE); } H->Left = H->Right = NULL; H->Element = 0; return H;}ElementType FindMin(PriorityQueue H){ if (!H) return H->Element; return 0;}int IsEmpty(PriorityQueue H){ return H->Left == NULL && H->Right == NULL;}void SwapChildren(PriorityQueue H){ PriorityQueue Temp; Temp = H->Left; H->Left = H->Right; H->Right = Temp;}static PriorityQueue Merge1(PriorityQueue H1, PriorityQueue H2){ if (H1->Left == NULL) H1->Left = H2; else { H1->Right = Merge(H1->Right, H2); SwapChildren(H1); } return H1;}PriorityQueue Merge(PriorityQueue H1, PriorityQueue H2){ if (H1 == NULL) return H2; if (H2 == NULL) return H1; if (H1->Element < H2->Element) return Merge1(H1, H2); else return Merge1(H2, H1);}PriorityQueue Insert1(ElementType X, PriorityQueue H){ PriorityQueue SingleNode; SingleNode = Initialize(); SingleNode->Element = X; H=Merge(SingleNode, H); return H;}PriorityQueue DeleteMin(PriorityQueue H){ PriorityQueue LeftHeap, RightHeap; if (IsEmpty(H)) { printf("ERROR!\n"); exit(EXIT_FAILURE); } LeftHeap = H->Left; RightHeap = H->Right; free(H); return Merge(LeftHeap, RightHeap);}
0 0
- 斜堆--C语言实现
- 堆 C语言实现
- 斜堆实现文件C语言
- 堆排序C语言实现
- 堆排序C语言实现
- 堆排序C语言实现
- 堆排序C语言实现
- 堆排序--C语言实现
- C语言实现堆排序
- 堆排序--C语言实现
- 堆排序C语言实现
- 二叉堆--C语言实现
- 二叉堆C语言实现
- 二叉堆--C语言实现
- 堆C语言实现5.1
- 堆排序C语言实现
- C语言实现堆排序
- 堆排序c语言实现
- (转)进程与线程的区别
- 利用java调用批处理的两种方法及区别
- 老炮儿
- Java 获取请求主机IP地址
- Objective-c语言_错误(视图多重关联)
- 斜堆--C语言实现
- C++入门(7):对象
- 为什么要用IOC
- chrome快捷键
- <LeetCode><Medium>15 ThreeNums
- The identity used to sign the executable is no longer valid
- MySQL安装详细步骤
- 微软雅虎猛追,Google搜索市场份额跌至64%
- (转)进程与线程的区别与联系