#include <stdio.h>
#include <stdlib.h>
#define MinData -10001
typedef struct HeapStruct *MinHeap;
struct HeapStruct{
int *elements;
int size;
int capacity;
};
MinHeap Creats(int MaxSize);
void Min_Insert(MinHeap H, int item);
int IsFull(MinHeap H);
void show_path(MinHeap H, int i);
int main(int argc, char const *argv[])
{
// freopen("test.txt", "r", stdin);
int M, N, tmp;
scanf("%d %d", &M, &N);
MinHeap H = Creats(M);
for (int i = 0; i < M; ++i){
scanf("%d", &tmp);
Min_Insert(H, tmp);
}
for (int i = 0; i < N; ++i){
scanf("%d", &tmp);
show_path(H, tmp);
}
return 0;
}
MinHeap Creats(int MaxSize)
{
MinHeap H = (MinHeap)malloc(sizeof(struct HeapStruct));
H->elements = (int*)malloc(sizeof(int)*(MaxSize + 1));//因为elemens[0]作为哨兵,从[1]开始存放,所以分配MaxSize+1空间
H->size = 0;
H->capacity = MaxSize;
H->elements[0] = MinData;//将elements[0]作为哨兵
return H;
}
void Min_Insert(MinHeap H, int item)
{
if(IsFull(H))
return;
int i;
i = ++H->size;//i指向插入后堆中的最后一个元素的位置
for(; H->elements[i/2] > item; i/=2) //比较插入的结点和其父结点的大小
H->elements[i] = H->elements[i/2];
H->elements[i] = item;
}
int IsFull(MinHeap H)
{
if(H->size == H->capacity)
return 1;
else
return 0;
}
void show_path(MinHeap H, int i)
{
for (; i > 0; i/=2){
if(i != 1)
printf("%d ", H->elements[i]);
else
printf("%d\n", H->elements[i]);
}
}
05-树7 堆中的路径
最新推荐文章于 2018-11-04 11:36:41 发布