t()调用Р int j,flag;Р int k=UINT_MAX; // 取k为不小于可能的值Р for(j=1;j<=i;j++)Р if(t[j].weight<k&&t[j].parent==0)Р k=t[j].weight,flag=j;Р t[flag].parent=1;Р return flag;Р}Р//--------------------slect函数----------------------Рvoid select(HuffmanTree t,int i,int &s1,int &s2)Р{ // s1为最小的两个值中序号小的那个Р int j;Р s1=min(t,i);Р s2=min(t,i);Р if(s1>s2)Р {Р j=s1;Р s1=s2;Р s2=j;Р }Р}Р// -------------------参考课本算法6.12-------------------Рvoid HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n)Р{ // w存放n个字符的权值(均>0),构造赫夫曼树HT,并求出n个字符的赫夫曼编码HCР int m,i,s1,s2,start;Р int c,f;Р HuffmanTree p;Р char *cd;Р if(n<=1)Р return;//检测结点数是否可以构成树Р m=2*n-1;Р HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); // 0号单元未用Р for(p=HT+1,i=1;i<=n;++i,++p,++w)Р {Р p->weight=*w;Р p->parent=0;Р p->lchild=0;Р p->rchild=0;Р }Р for(;i<=m;++i,++p)