书生vs雨辰 2015-12-15 09:45 采纳率: 0%
浏览 1490
已结题

哈夫曼树,请问大神们,下面的译码部分怎么没有输出?请大神们帮我修改下~~~(最好再加个能有个文件输出)

#include
#include
#include
#define maxsize 100
#define max 100
typedef struct
{
char data;
int weight;
int parent;
int lchild;
int rchild;
}huffnode;
typedef struct
{
char cd[max];
int start;
}huffcode;
huffnode ht[2*max];
huffnode * input()
{
int i,n;
printf("Enter elem num:");
scanf("%d",&n);
ht[0].weight=n;
for(i=1;i<=n;i++)
{
getchar();
printf("%d elem data weight:",i);
scanf("%c%d",&ht[i].data,&ht[i].weight);
}
return ht;
}
// huffnode ht[2*max];
huffnode init()
{
ht[0].weight=27;
ht[1].data=' ';ht[1].weight=186;
ht[2].data='A';ht[2].weight=64;
ht[3].data='B';ht[3].weight=13;
ht[4].data='C';ht[4].weight=22;
ht[5].data='D';ht[5].weight=32;
ht[6].data='E';ht[6].weight=103;
ht[7].data='F';ht[7].weight=21;
ht[8].data='G';ht[8].weight=15;
ht[9].data='H';ht[9].weight=47;
ht[10].data='I';ht[10].weight=57;
ht[11].data='J';ht[11].weight=1;
ht[12].data='K';ht[12].weight=5;
ht[13].data='L';ht[13].weight=32;
ht[14].data='M';ht[14].weight=20;
ht[15].data='N';ht[15].weight=57;
ht[16].data='O';ht[16].weight=63;
ht[17].data='P';ht[17].weight=15;
ht[18].data='Q';ht[18].weight=1;
ht[19].data='R';ht[19].weight=48;
ht[20].data='S';ht[20].weight=51;
ht[21].data='T';ht[21].weight=80;
ht[22].data='U';ht[22].weight=23;
ht[23].data='V';ht[23].weight=8;
ht[24].data='W';ht[24].weight=18;
ht[25].data='X';ht[25].weight=1;
ht[26].data='Y';ht[26].weight=16;
ht[27].data='Z';ht[27].weight=1;
return ht;
}
void hfmtree(huffnode ht[])
{
int i,k,s1,s2,m1,m2,n;
n=ht[0].weight;
for(i=0;i<=2*n-1;i++)
ht[i].parent=ht[i].lchild=ht[i].rchild=0;
for(i=n+1;i<=2*n-1;i++)
{
m1=m2=10000;
s1=s2=0;
for(k=0;k<=i-1;k++)
if(ht[k].parent==0)
if(ht[k].weight {
m2=m1;
s2=s1;
m1=ht[k].weight;
s1=k;
}
else if(ht[k].weight {
m2=ht[k].weight;
s2=k;
}
ht[s1].parent=i;
ht[s2].parent=i;
ht[i].weight=ht[2].weight+ht[3].weight;
ht[i].lchild=s1;
ht[i].rchild=s2;
}
}
huffcode hcd[max],d;
huffcode *output(huffnode ht[])
{
int i,n,f,c,k,x;
n=ht[0].weight;
for(i=0;i {
d.start=n+1;
c=i;
f=ht[i].parent;
while(f!=0)
{
if(ht[f].lchild==c)
d.cd[--d.start]='0';
else
d.cd[--d.start]='1';
c=f;
f=ht[f].parent;
}
hcd[i]=d;
}
printf("Input huffman code:\n");
for(i=0;i {
printf("%c:",ht[i].data);
x=hcd[i].start;
for(k=x;k printf("%c",hcd[i].cd[k]);
printf("\n");
}
return hcd;
}
void coding(huffcode hcd[],huffnode ht[])
{
int i,j,m,n,k,x;
char in[maxsize],out[2*maxsize];
m=0;
printf("Enter a string:");
getchar();
gets(in);
n=strlen(in);
for(i=0;i {
for(j=0;j if(in[i]==ht[j].data)
{
x=hcd[j].start;
for(k=x;k out[m++]=hcd[j].cd[k];
}
}
printf("The coding result is:\n");
for(i=0;i printf("%c",out[i]);
printf("\n");
}
void decoding(huffcode hcd[],huffnode ht[])
{
int i,j,m,k,x,n,w,h;
char code[maxsize*2],decode[maxsize];
printf("Enter code stream:\n");
scanf("%s",code);
n=strlen(code);
i=0;m=0;
while(i for(j=0;j {
x=hcd[j].start;
for(k=x,w=i;k if(code[w]!=hcd[j].cd[k])
break;
if(k>ht[0].weight)
{
decode[m++]=ht[j].data;
break;
}
}
i=w;
}
printf("The decoding result is:\n");
printf("%c",decode[i]);
}
int main ()
{
int select;
huffnode * ht;
huffcode * hcd;
ht=init();
hfmtree(ht);
hcd=output(ht);
do
{
printf("
*************\n");
printf("0. 退出\n");
printf("1. 编码\n");
printf("2. 译码\n");
printf("**************\n");
printf("Enter (0---2):");
scanf("%d",&select);
if(select==0){
printf("Thank you use the software!\n");
exit(1);
}
if(select==1)
coding(hcd,ht);
else if(select==2)
decoding(hcd,ht);
}while(1);
return 0 ;
}

  • 写回答

2条回答 默认 最新

  • 书生vs雨辰 2015-12-15 09:46
    关注

    在线等,急急急!!!

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?