从文件中读取下列二元编码00001110010101100001110001110001111010,实现其游程编码,然后再对游程序列进行哈弗曼编码。 结果保存在 out.dat 中。 程序代码: #include #include #include struct node{ int id; int num; double probability; }; typedef struct{ double weight; int parent,lchild,rchild; }HuffmanTree; void Select(HuffmanTree *HT,int i,int *s1,int *s2) { int n,T=0,T1; for(n=1;nweight=*w; p->lchild=0; p->rchild=0; p->parent=0; } for(;i<=m;++i,++p) { p->weight=0; p->lchild=0; p->rchild=0; p->parent=0; } for(i=n+1;i<=m;++i) { Select(HT,i,&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; } cd=malloc(n*sizeof(char)); cd[n-1]='\0'; for(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]='1'; else cd[--start]='0'; HC[i]=(char *)malloc((n-start)*sizeof(char)); strcpy(HC[i],&cd[start]); } free(cd); } void initstruct(struct node p[],int T) { int i; for(i=1;i<=T;i++) { p[i].id=0; p[i].num=0; p[i].probability=0.0; } } int getI(struct node p[],int e,int T) { int i; for(i=1;i<=T;i++) { if(p[i].id==e) return i; } return -1; } void count(struct node p[],int T) { int i; for(i=1;i<=T;i++) { p[getI(p,p[i].id,T)].num++; } } int countevent(struct node p[],int T) { int i,n=0; for(i=1;i<=T;i++) { if(p[i].num!=0) n++; } return n; } void order(struct node p[],struct node p2[],int T)...