数据结构课程设计报告哈夫曼编码译码器 下载本文

unsigned int c; char *cd;

HC=(HuffmanCode)malloc((n+1)*sizeof(char*));// 分配n个字符编码的头指针 cd=(char*)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) // c是其双亲的左孩子 cd[--start]='0'; // 由叶子向根赋值'0' else // c是其双亲的右孩子

cd[--start]='1'; // 由叶子向根赋值'1'

HC[i]=(char*)malloc((n-start)*sizeof(char)); // 为第i个字符编码分配空间 stringcopy(HC[i],&cd[start]); // 从cd复制编码串到HC矩阵 }

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

//---------------------译码----------------------------------------------------- void encode() {

FILE *fp1=NULL,*fp2=NULL;

char input[20]=\

printf(\请输入输入文件名(input.txt):\scanf(\

if ((fp1=fopen(input,\{ }

printf(\请输入输出文件名(output.txt):\scanf(\

printf(\无此文件!\getchar(); getchar(); return ;

if((fp2=fopen(output,\{ } int i,k;

unsigned int *w,p,m=0,j; {

if(fgetc(fp1)==' ') for(k=0;!feof(fp1);k++) printf(\不能创建文件!\getchar(); getchar(); return ;

m++; }

printf(\哈夫曼编码为:\

fp1=fopen(input,\

w=(unsigned int*)malloc(m*sizeof(unsigned int)); // 动态生成存放m个权值的空间 for(j=0;j<=m-1;j++) {

fscanf(fp1,\依次输入原码

}

for(p=0;p

for(i=0;i

fclose(fp1);

if(*(w+p)==HT[i+1].weight) {

fprintf(fp2,\ printf(\ }

fclose(fp2); }

printf(\输出完成.按任意键继续....\getchar(); getchar();

//-------------------------解码-------------------------------------------------

void decode() {

FILE *fp1=NULL,*fp2=NULL; char input[20],output[20]; char *code;

code=(char*)malloc(n*sizeof(char)); printf(\请输入输入文件名(input.txt):\scanf(\

if ((fp1=fopen(input,\{ }

printf(\请输入输出文件名(output.txt):\scanf(\

if((fp2=fopen(output,\{

printf(\不能创建文件!\getchar(); getchar(); return ;

printf(\无此文件!\getchar(); getchar(); return ;

} int i,j;

printf(\哈夫曼译码为:\for(i=0;!feof(fp1);i++) {

*(code+i)=fgetc(fp1); *(code+i+1)='\\0'; for(j=0;j

if(strcmp(code,HC[j+1])==0) { }

fprintf(fp2,\printf(\i=-1; break;

}

fclose(fp1);

fclose(fp2);

printf(\输出完成.按任意键继续....\getchar(); getchar(); }

//---------------------初始化哈夫曼树------------------------------------------