Select(HT,i-1,&p1,&p2); HT[p1].parent=i;HT[p2].parent=i; HT[i].lchild=p1;HT[i].rchild=p2; HT[i].weight=HT[p1].weight+HT[p2].weight; } HC=(hfmcode)malloc((n+1)*sizeof(char *)); cd=(char *)malloc(n*sizeof(char)); cd[n-1]='\\0'; for(i=1;i<=n;++i) //给n个字符编码 { 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'; } } HC[i]=(char*)malloc((n-start)*sizeof(char)); strcpy(HC[i],&cd[start]); } free(cd); }
int main(){ char code[100],h[100],hl[100]; int n,i,j,k,l; ifstream input_file; //文件输入输出流 ofstream output_file; char choice,str[100]; hfmtree HT; hfmcode HC; cout<<\ cout<<\ \计算机(3)班\ \ \ while(choice!='Q'&&choice!='q') //当choice的值不为q且不为Q时循环 {
11
cout<<\ \赫夫曼编码/译码器*************************\\n\ cout<<\ \ \ \ \ cout<<\请输入您要操作的步骤:\ cin>>choice; if(choice=='I'||choice=='i') //初始化赫夫曼树 { cout<<\请输入字符个数:\ cin>>n; hfmcoding(HT,HC,n); for(i=1;i<=n;++i) { cout< 12 for(i=0;i 13 } hl[j]=h[l]; } hl[j]='\\0'; if(strcmp(HC[i],hl)==0) { output_file< else if(choice=='Q'||choice=='q') //退出程序 { exit(0); } else //如果选了选项之外的就让用户重新选择 { cout<<\您没有输入正确的步骤,请重新输入!\ } cout< return 0; 14 六.调试分析 编码 、译码 、退出 15