事先声明:哈夫曼编码中的选择函数Select思路借鉴了csdn大佬,非原创(吹一波彩虹屁,大佬真厉害)
众所周知,数据结构这门课程是非常非常重要的。无论是找工作还是考研,你都能体会到。数据结构这本书的知识也非常的奇特美妙。希望大家好好学习研究。废话就不多说,上代码。
Select函数的三种写法:
//第一种
void Select(HuffmanTree ht, int n, int &s1, int &s2)
{
int i;
for (i = 1; i <= n; i++)
{
if (ht[i].parent == 0) //针对未构造的才能选择
{
s1=i;//选择一个对比 记录下标
break;
}
}
for (i = s1+1; i <= n; i++)
{
if (ht[i].parent == 0)
{
if (ht[i].weight < ht[s1].weight)
{
s1 = i;
}
}
}
for (i = 1; i <= n; i++)
{
if (ht[i].parent == 0&&i!=s1) //针对未构造的才能选择 除去第一小的数列
{
s2=i;选择一个对比 记录下标
break;
}
}
for (i = s2+1; i <= n; i++)
{
if (ht[i].parent == 0&&i!=s1) //除去第一小的数列
{
if (ht[i].weight < ht[s2].weight)
{
s2 = i;
}
}
}
}
//第二种
void Select(HuffmanTree ht, int n, int &s1, int &s2)
{
int i, min1 = MAX, min2 = MAX;
s1 = 0;
s2 = 0;
for (i = 1; i <= n; i++)
{
if (ht[i].parent == 0)
{
if (ht[i].weight < min1)
{
min2 = min1;
s2 = s1;
min1 = ht[i].weight;
s1 = i;
}
else if (ht[i].weight < min2)
{
min2 = ht[i].weight;
s2 = i;
}
}
}
}
//第三种
void Select1(HuffmanTree ht, int n, int &s1, int &s2)
{
int i, min1 = MAX, min2 = MAX;
s1 = 0;
s2 = 0;
for (i = 1; i <= n; i++)
{
if (ht[i].parent == 0)
{
i