哈夫曼树实现(C语言)(数据结构)

#include<stdio.h>
#include<stdlib.h>
typedef struct{
	char data;
	int weight;
	int lc,rc,pr;
}htNode;
htNode *Input(int &n){
	htNode *p;
	int i;
	printf("初始结点个数:");
	scanf("%d",&n);
	n=n*2-1;
	p=(htNode *)malloc(n*sizeof(htNode));
	printf("元素 权值\n");
	for(i=0;i<(n+1)/2;i++){
		getchar();//清空缓冲区 
		scanf("%c %d",&p[i].data,&p[i].weight);
	}
	return p;
}
void seekMin(htNode *ht,int n,int &m1,int &m2){
	int i,M1=9999,M2=9999;
	htNode *p=ht;
	for(i=0;i<n;i++){
		if(p[i].pr==-1){
			if(p[i].weight<M1){
				M2=M1;
				m2=m1;
				M1=p[i].weight;
				m1=i;
			}else if(p[i].weight<M2){
				M2=p[i].weight;
				m2=i;
			}
		}
	}
}
void creatHT(htNode *ht,int n){
	int i,m1,m2;
	htNode *p=ht;
	for(i=0;i<n;i++){
		p[i].lc=p[i].rc=p[i].pr=-1;
	}
	for(i=(n+1)/2;i<n;i++){
		seekMin(p,i,m1,m2);
		p[i].weight=p[m1].weight+p[m2].weight;
		p[i].data='0';
		p[i].lc=m1;
		p[i].rc=m2;
		p[m1].pr=p[m2].pr=i;
	}
}
void prt(htNode *ht,int n){
	htNode *p=ht;
	int i;
	printf("下标\t元素\t权值\t双亲\t左\t右\n");
	for(i=0;i<n;i++){
		printf("%d\t%c\t%d\t%d\t%d\t%d\n",i,p[i].data,p[i].weight,p[i].pr,p[i].lc,p[i].rc);
	}
}
int main(){
	htNode *ht;
	int n;
	ht=Input(n); 
	creatHT(ht,n);
	prt(ht,n);
}

若有问题欢迎提出!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值