思路:
并不难,可以用数组来表示最小堆,从下标为1的位置开始存入数据,i表示下标,则i/2就是父节点的位置,不过要记得在下标为0的位置设置哨兵,这回简化代码。
运行结果:
代码如下:
#include<iostream>
using namespace std;
#define Max 1001
#define Flag -100001
int H[Max];
void Insert(int size,int data)
{
int i;
for (i =size + 1; H[i / 2] > data; i /= 2)
{
H[i] = H[i / 2];
}
H[i] = data;
}
void Print(int H[],int Position)
{
int i = Position;
cout << H[i]; //先打印第一个元素
while (i / 2 >= 1)
{
cout << " " << H[i/2]; //只要父节点>=1,就说明没有走到根结点,一直打印
i /= 2;
}
cout << endl;
}
int main()
{
//接收N和M
int N, M,Data;
cin >> N >> M;
//设置哨兵,保证0位置的哨兵是最小的(插入的数据最小为-10000,Flag=-10001)
H[0] = Fl