Walkerbao 2015-01-26 12:22 采纳率: 100%
浏览 906

关于哈夫曼编码的程序运行时出错,我分析是由于cd定义出现了问题,导致后边cd[--start]出错

void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n){
//w存放n个字符的权值(均>0),构造赫夫曼树 HT,并求出n个字符的赫夫曼编码 HC
printf("123");
system("pause");
int s1,s2,i,start;
int f=0;
char *cd;
int c;
HuffmanTree p=NULL;
if(n<=1) return;
int m;
m=2*n-1;
if(!(HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)))) //0号单元未用
exit(OVERFLOW);
for(p=HT,i=1;i<=n;++i,++p,++w){
p->weight=*w;
p->parent=0;
p->lchild=0;
p->rchild=0;
}//for
for(;i<=m;++i){ //建赫夫曼树
//在HT[1..i-1]选择parent为0且weight最小的两个结点,其序号分别为是s1和s2
Select(HT,i-1,s1,s2);
HT[s1].parent=i;
HT[s2].parent=i;
HT[i].lchild=s1;
HT[i].rchild=s2;
HT[i].weight=HT[s1].weight+HT[s2].weight;
}//for
//---------------从叶子到根逆向求每个字符的赫夫曼编码------------------

if(!(HC=(HuffmanCode)malloc(sizeof(HTNode))))
    exit(OVERFLOW);

if(!(cd=(char *)malloc(n*sizeof(char))))
    exit(OVERFLOW);
cd[n-1]= '\0';

for(int i=1;i<=n;++i){
    start=n-1;  
    for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent){
        if(HT[f].lchild==c)
            cd[--start]='0';
        else
            cd[--start]='1';
          }  
    if(!(HC[i]=(char *)malloc((n-start)*sizeof(char))))
        exit(OVERFLOW);

    strcpy(HC[i],&cd[start]);
}//for

free(cd);  //释放工作空间 

}//HuffmanCoding

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 C# TCP服务端,客户端退出后,不断有数据进来
    • ¥15 HLs设计手写数字识别程序编译通不过
    • ¥15 Stata外部命令安装问题求帮助!
    • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
    • ¥15 TYPCE母转母,插入认方向
    • ¥15 如何用python向钉钉机器人发送可以放大的图片?
    • ¥15 matlab(相关搜索:紧聚焦)
    • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
    • ¥15 路易威登官网 里边的参数逆向
    • ¥15 Arduino无法同时连接多个hx711模块,如何解决?