数据结构中哈夫曼树select函数的实现

有两种方案

说明: s1,s2是用来保存两个最小权值的节点的下标;

ht是哈夫曼树,Huffmantree是结构体类型,有四个域;

i是已经有了权值的节点数。

该函数是根据清华大学出版社的数据结构书来写的。

 

void select   (Huffmantree ht, int i,int*s1,int*s2)//有了孩子的节点就不能再用了  

{  

int m, n,min,j,k = 1;  

for (n = 1; n <= 2; n++)//连续找两个最小权值的数  

{  

for (m = 1; m <= i; m++)  

{  

//第一种方案:parent ==0  

if (ht[m].parent == 0 && *s1 != m)  

{  

min = ht[m].weight;  

k = m;  

j = m;  

while (1)  

{  

if (j < i)  

j++;  

if (ht[j].parent == 0 && min > ht[j].weight && *s1 != j)  

{  

   min = ht[j].weight;  

    k = j;  

}  

if (j == i)  

break;  

}  

}  

else  

continue;  

//一下为第二种方案parent!=0  

//  

//if (ht[m].parent != 0 ||* s1 == m)  

// continue;  

//min = ht[m].weight;//擂台法  

//k = m;  

//j = m;//保存下标  

//while (1)  

//{  

// if(j<i)//只针对最后一个为最小时,避免越界,出现访问错误  

// j++;  

// if (ht[j].parent != 0 || *s1 == j)//不找parent有值或第一次已经找过的  

// {  

// if (j == i)//只针对最后一个,避免越界,出现访问错误  

// break;  

// continue;  

// }  

// if (min > ht[j].weight)//min比较大时交换  

// {  

// min = ht[j].weight;//交换  

// k = j;//保存下标  

// }  

// if (j == i)//找完后的结束条件  

// break;  

//}  

if (n == 1)  

  *s1 = k;//保存第一个下标  

else  

   *s2 = k;  

break;  

}  

}  

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码仔~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值