结构数组求助!
typedef struct
{
unsigned int weight;
unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;
/*****字符解码*****/
void DeCode(HTNode HT[],int huffNodes,char *strSource,char *strTest,char *strResult)
{
int i,j;
char ctemp;
for(i=0;(ctemp=strTest[i])!='\0';i++)
{
for(j=huffNodes-1;HT[j].lchild!=0||HT[j].rchild!=0;)
{
if(ctemp=='0')
j=HT[j].lchild;
else if(ctemp=='1')
j=HT[j].rchild;
i++;
}
*strResult++=*(strSource+j);
}
*strResult='\0';
return;
}
这是一个赫夫曼解码程序,HT[]的数组元素为结构,在内层for循环里面,首次执行时对的,而首次以后求出的j值都是一些很大的数,即HT[j]里面的数据元素都是很大的值,而原本存储的都是一些较小的数。
[解决办法]
SelectNode(HT,i-1,&minIndex1,&minIndex2);
HT[minIndex1].parent=i;
HT[minIndex2].parent=i;
HT[i].lchild=minIndex1;
HT[i].rchild=minIndex2;
通过SelectNode函数,你修改了minIndex1,minIndex2;又传给HT(),可能导致你的j很大。看看你的SelectNode函数有没有问题。
[解决办法]
- C/C++ code
DeCode(hufftree,2*leafNum,alphabet,resultCode1,resultCode2);