1、 /* floor(),ceil(),abs() */process.h /* exit() */* 函数结果状态代码*/#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1/* #define OVERFLOW -2 因为在math. h 中已定义OVERFLOW 的值为3,故去掉此行*/typedef int Status; /* Status 是函数的类型,其值是函数结果状态代码,如OK 等*/typedef int Boolean; /* Boolean 是布尔类型,其值是TRUE 或
2、FALSE */2将哈夫曼树存储结构定义放在一个头文件:取名为huffermandef.h。typedef structchar ch;unsigned int weight;unsigned int parent,lchild,rchild;HTNode,*HuffmanTree; /* 动态分配数组存储赫夫曼树*/typedef char *HuffmanCode; /* 动态分配数组存储赫夫曼编码表*/3.将哈夫曼树的基本操作算法也集中放在一个文件之中,取名为huffermanalgo.h。int min1(HuffmanTree t,int i) /* 函数void select()调
3、用*/int j,flag;unsigned int k=UINT_MAX; /* 取k 为不小于可能的值*/for(j=1;j=i;j+)if(tj.weight*s2)j=*s1;*s1=*s2;*s2=j;void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,char *ch,int n) /* 算法6.12 */ /* w 存放n 个字符的权值(均0),构造赫夫曼树HT,并求出n 个字符的赫夫曼编码HC */int m,i,j,s1,s2,start;unsigned c,f;HuffmanTree p;char *cd;i
4、f(n=1)return;m=2*n-1;HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode); /* 0 号单元未用*/for(p=HT+1,i=1;i1):n);wt=(int*)malloc(n)*sizeof(int);chh=(char*)malloc(n)*sizeof(char);请输入数据文件名:,str1);WriteDataFile(str1);ReadDataFile(str1,wt,chh);HuffmanCoding(HT,HC,wt,chh,n); node letter weight parent lchild rchild %4d
5、 %6c %7d %8d %8d %8d,i,HTi.ch,HTi.weight,HTi.parent,HTi.lchild,HTi.rchild); printf(* 哈夫曼树编码译码 *n* 1.对哈夫曼树进行编码 *n* 2.对文本文件中的文本进行编码 *n* 2.对代码文件中的代码进行译码 *n* 3.感谢使用 *nwhile(x)请输入要实现功能的代码: scanf(y); switch(y) case 1:赫夫曼编码为: for(i=1; printf(%c的编码为:,*(chh+i-1); puts(HCi); break; case 2:请输入文本文件名:,str2); Wri
6、teToBeTran(str2); ReadToBeTran(str2,str); printf(请输入文本编码存放文件名:,str5); WriteCode(str2,str5,HT,HC,n); ReadCode(str5); break; case 3:请输入代码文件名:,str3); WriteCodeFile(str3); ReadCodeFile(str3,str4); yima(HT,n,str4,hh);请输入译文存放文件名:,str6); WriteTextFile(str6,hh); ReadTextFile(str6); case 4:感谢使用! x=0; default:error!break; 保存,编译,连接,运行。七、 实验结果:八、 实验总结及心得体会:九、 对本实验过程及方法、手段的改进建议:报告评分:指导教师签字: 批阅日期:注意: 实验报告以纸质文档形式上交。实验报告将记入平时成绩; 每次实验开始时,交上一次的实验报告,否则将扣除此次实验成绩。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1