20xx本科毕业设计哈夫曼编码内容摘要:

HT,int a,int *p1,int *p2) //Select 函数,选出 HT 树到 a为止,权值最小且 parent 为 0 的 2 个节点 void main() 主 函数: 利用已建好的哈夫曼树(如不在内存,则从文件 中读入) 对文件中的正文进行编码,然后将结果存入文件 中。 如果正文中没有要编码的字符,则键盘读入并存储到 ToBeTran 文件中。 读入 ToBeTran 中将要编码的内容,将编码好的哈夫曼编码存储 到 CodeFile 中。 、 Encoding 编码功能:对输入字符进行编码 、 Decoding 译码功能: 利用已建好的哈夫曼树将文件 中的代码进行译码,结果存入文件 中。 Print() 打印功能函数:输出哈夫曼树,字符,权值,以及它对应的编码。 ,主函数主要设计的是一个分支语句,让用户挑选所实现的功能。 使用链树存储,然后分别调用统计频数函数,排序函数,建立哈夫曼函数,编码 9 函数,译码函数来实现功能。 (功能模块图) 三:详细设计 哈夫曼编码 /译码器源代码 include include include include include typedef struct{ //赫夫曼树的结构体 char ch。 int weight。 //权值 int parent,lchild,rchild。 }htnode,*hfmtree。 typedef char **hfmcode。 void Select(hfmtree amp。 HT,int a,int *p1,int *p2) //Select 函数,选出 HT树到 a为止,权值最小且 parent 为 0的 2个节点 10 { int i,j,x,y。 for(j=1。 j=a。 ++j){ if(HT[j].parent==0){ x=j。 break。 } } for(i=j+1。 i=a。 ++i){ if(HT[i].weightHT[x].weightamp。 amp。 HT[i].parent==0){ x=i。 //选出最小的节点 } } for(j=1。 j=a。 ++j) { if(HT[j].parent==0amp。 amp。 x!=j) { y=j。 break。 } } for(i=j+1。 i=a。 ++i) { 11 if(HT[i].weightHT[y].weightamp。 amp。 HT[i].parent==0amp。 amp。 x!=i) { y=i。 //选出次小的节点 } } if(xy){ *p1=y。 *p2=x。 } else { *p1=x。 *p2=y。 } } void hfmcoding(hfmtree amp。 HT,hfmcode amp。 HC,int n) //构建赫夫曼树 HT,并求出 n 个字符的赫夫曼编码 HC { int i,start,c,f,m,w。 int p1,p2。 char *cd,z。 if(n=1){ 12 return。 } m=2*n1。 HT=(hfmtree)malloc((m+1)*sizeof(htnode))。 for(i=1。 i=n。 ++i) //初始化 n个叶子结点 { printf(请输入第 %d 字符信息和权值: ,i)。 scanf(%c%d,amp。 z,amp。 w)。 while(getchar()!=39。 \n39。 ) { continue。 } HT[i].ch=z。 HT[i].weight=w。 HT[i].parent=0。 HT[i].lchild=0。 HT[i].rchild=0。 } for(。 i=m。 ++i) //初始化其余的结点 { HT[i].ch=39。 039。 13 HT[i].weight=0。 HT[i].parent=0。 HT[i].lchild=0。 HT[i].r。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。