首页 C 哈弗曼编码实验报告

C 哈弗曼编码实验报告

举报
开通vip

C 哈弗曼编码实验报告C 哈弗曼编码实验报告 学院, 计算机科学与技术 专业,计算机科学与技术学号, 班级, 姓名, 2010-12-25 题目:哈弗曼编码 一、 需求分析: 1) I:初始化。从文件读入字符集大小n,以及n个字符和n个权 值,建立Huffman树,。 2) E:编码(encoding)。利用以建好的HuffmanTree(如不在内在, 则从文件hfmzifu中读入),对用户给定文件中正文进行编码, 然后将结果存入用户给定文件中。 3) D:译码(decoding)。利用已建好的HuffmanTree对输入...

C  哈弗曼编码实验报告
C 哈弗曼编码实验报告 学院, 计算机科学与技术 专业,计算机科学与技术学号, 班级, 姓名, 2010-12-25 题目:哈弗曼编码 一、 需求分析: 1) I:初始化。从文件读入字符集大小n,以及n个字符和n个权 值,建立Huffman树,。 2) E:编码(encoding)。利用以建好的HuffmanTree(如不在内在, 则从文件hfmzifu中读入),对用户给定文件中正文进行编码, 然后将结果存入用户给定文件中。 3) D:译码(decoding)。利用已建好的HuffmanTree对输入的文件 中的代码进行译码,结果存入用户给定文件中。 4) T:印HuffmanTree。将已在内在中的HuffmanTree以直观的方 式显示在终端上。 二、 详细设计 1) 源文件:Huffmantree.cpp 2) 函数有主函数main();求最小的权值minl(HuffmanTree.int i); 选 择函数Silect (HuffmanTree t,int i,int *s1,int *s2);哈弗曼编码函 数HuffmanCoding(HuffmanTree *HT,HuffmanCode *HC,int *w,int n); 源程序 #include #include #include using namespace std; typedef struct { int weight; int parent; int lchild; int rchild; }HTNode,*HuffmanTree; typedef char **HuffmanCode; int minl(HuffmanTree t,int i); void HuffmanCoding(HuffmanTree *HT,HuffmanCode *HC,int *w,int n); void select(HuffmanTree t,int i,int *s1,int *s2); //-------------------------------------------------------------------------- void main() { HuffmanTree HT; HuffmanCode HC; ifstream in("hfmzifu.txt"); int *w,n,i; cout<<"从文件hfmzifu.txt输入字符的个数,字符,权值,#代表空格"<>n; char *ch; ch=(char *)malloc((n+1)*sizeof(char)); w=(int *)malloc(n*sizeof(int)); for (i=0;i>ch[i+1]; in>>w[i]; }//给w赋值。 HuffmanCoding(&HT,&HC,w,n);//建哈弗曼树 cout<<"--------------------------------------------------------"<>c; if (c==0) { cout<<"退出系统~"<4||c<0) { cout<<"你输入有误请重新输入:"<>c; } fstream file; ofstream outfile; ifstream printfile; ifstream codefile; ofstream Myoutput; if(c==1) { cout<<"哈弗曼树为:"<n) { outfile<=1&&flag<=n) //判断停止的条件 { Myoutput<*s2) { j=*s1; *s1=*s2; *s2=j; } } void HuffmanCoding(HuffmanTree *HT,HuffmanCode *HC,int *w,int n) { if(n<=1) return; int s1,s2,start; char *cd=NULL; int m=2*n-1; *HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); HuffmanTree p; int i,c,f; for(p=(*HT)+1,i=1;i<=n;i++,p++,w++) { (*p).weight=*w; (*p).parent=0; (*p).rchild=0; (*p).lchild=0; } for(;i<=m;i++,p++) { (*p).weight=0; (*p).parent=0; (*p).rchild=0; (*p).lchild=0; } for(i=n+1;i<=m;i++) { Select(*HT,i-1,&s1,&s2);//找出两个权值最小的节点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; } //----从叶子到根逆向求每个字符的哈弗曼编码---- (*HC)=(HuffmanCode)malloc((n+1)*sizeof(char *)); 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) { cd[--start]='0'; } else { cd[--start]='1'; } (*HC)[i]=(char *)malloc((n-start)*sizeof(char)); strcpy((*HC)[i],&cd[start]); } free(cd); } (3)程序执行结果:
本文档为【C 哈弗曼编码实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_562397
暂无简介~
格式:doc
大小:65KB
软件:Word
页数:13
分类:互联网
上传时间:2018-01-04
浏览量:12