一个最小堆的实现

如何实现最小堆,这是我按照书上写的类以及定义的函数,那位大佬可以给我讲一下如何在main函数中实现吗?(本人刚开始学习数据结构,如果有很低级的错误请担待)
类:
#pragma once
#include
using namespace std;
class minHeap
{
public:
struct minHeap_in
{
int heapsize, Maxsize;
int *heap;
};
typedef struct minHeap_in MinHeap;
int Size(MinHeap *xheap);
int Min(MinHeap *xheap);
void InitMinheap(MinHeap *xheap,int Maxheapsize);
MinHeap *Insert(minHeap_in *xheap,int x);
MinHeap *DeleteMin(minHeap_in *xheap,int *x);
void MakeHeap(MinHeap *xheap,int a[],int size,int Arraysize);
void Heapsort(int a[],int n);
};
函数定义:
#include “minHeap.h”
int minHeap::Size(MinHeap *xheap)//获取小堆根的大小
{
return xheap->heapsize;
}
int minHeap::Min(MinHeap *xheap)//获取根元素
{
if (xheap->heapsize == 0)
{
cout<< “underflow” <<endl;
exit(0);
}
return xheap->heap[0];
}
void minHeap::InitMinheap(MinHeap *xheap, int Maxheapsize)//初始化小堆根
{
xheap->Maxsize = Maxheapsize;
xheap->heap = new int(xheap->Maxsize);
//xheap->heap =(int *)malloc(sizeof(int)*xheap->Maxsize);
xheap->heapsize = 0;
}
minHeap::MinHeap *minHeap::Insert(minHeap_in *xheap, int x)//在小根堆中插入新元素
{
int i;
if (xheap->heapsize == xheap->Maxsize)
{
cout<< “overflow in Maxheap”;
exit(1);
}
i = xheap->heapsize++;//将根节点的左儿子赋值给i
while (i!=0&&xheap[(i-1)/2])//x小于其父节点(根节点)时的操作
{
xheap->heap[i] = xheap->heap[(i - 1) / 2];//将该节点与其父节点交换
i = (i - 1) / 2;
; }
xheap->heap[i] = x;//插入新元素
return xheap;
}
minHeap::MinHeap *minHeap::DeleteMin(minHeap_in *xheap, int *x)//每次重建小根堆删除第0个数据(根节点)
{
int y;
int i = 0, ic = 1;
if (xheap->heapsize == 0)
{
cout << “underflow” << endl;
exit(1);
}
else
{
*x = xheap->heap[0];//根节点
y = xheap->heap[–xheap->heapsize];//根节点的左儿子
while (icheapsize)
{
if ((ic + 1) < xheap->heapsize&&xheap->heap[ic] < xheap->heap[ic + 1])
ic++;
if (y >= xheap->heap[ic])
break;
xheap->heap[i] = y;
}
return xheap;
}
}
void minHeap::MakeHeap(MinHeap xheap, int a[], int size, int Arraysize)//构造小根堆
{
int i, ic;
int y;
delete xheap->heap;
xheap->heap = new int(Arraysize);//按照C语言执行
//xheap->heap = (int
)malloc(sizeof(int)*Arraysize);
memcpy(xheap->heap, a,int(Arraysize));
//memcpy(xheap->heap, a, sizeof(int)*Arraysize);
xheap->heapsize = size;
for (i = (xheap->heapsize - 2) / 2; i >= 0; i–)
{
y = xheap->heap[i];//y为当前节点
ic = 2 * i + 1;//ic为当前节点的左儿子所在的位置
while (ic<heapsize)
{
if ((ic + 1) < xheap->heapsize&&xheap->heap[ic] > xheap->heap[ic + 1])
{
ic++;
}
if (y >= xheap->heap[ic])
{
break;
}
xheap->heap[(ic - 1) / 2] = xheap->heap[ic];
ic = ic * 2 + 1;
}
xheap->heap[(ic - 1) / 2] = y;
}
}
void minHeap::Heapsort(int a[], int n)
{
//MinHeap *H = new MinHeap;
MinHeap *H = (MinHeap *)malloc(sizeof(MinHeap));
int x;
int i;
int N = n;
InitMinheap(H, N);
MakeHeap(H, a, n, n);
for (i = n - 1; i > 0; i–)
{
DeleteMin(H, &x);
a[i] = x;
}
}
main,是我自己写的,不会写,是错误的。
#include
#include"minHeap.h"
using namespace std;
int main()
{
minHeap Heap_run;
minHeap::MinHeap xheap;
int i;
int MinheapArrary[6] = {23,4,67,1,45,8};
Heap_run.InitMinheap(&xheap,6);
for (i = 0; i < 10; i++)
{
Heap_run.Insert(&xheap, MinheapArrary[i]);
}
Heap_run.MakeHeap(&xheap, MinheapArrary, 10, 10);
for (i = 0; i < 6; i++)
{
cout << MinheapArrary[i] << ’ ';
}
system(“pause”);
return 0;
}
希望看到的大佬帮我解决以下,谢谢!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值