05-树7 堆中的路径

#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]);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值