编译器实验报告.doc

编译器实验报告.doc

ID:59430534

大小:61.50 KB

页数:9页

时间:2020-05-25

编译器实验报告.doc_第1页
编译器实验报告.doc_第2页
编译器实验报告.doc_第3页
编译器实验报告.doc_第4页
编译器实验报告.doc_第5页
资源描述:

《编译器实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、编译器实验报告甘肃政法学院本科学生实验报告姓名学院专业班级试验时间XX年12月20日指导教师及职称实验成绩开课时间XX-XX学年1学期实验课程名称编译原理甘肃政法学院实验管理中心印制深圳大学实验报告课程名称:实验项目名称:学院:计算机与软件学院班级:实验时间:实验报告提交时间:教务处制2342、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。5实习报告题目:哈弗曼编译码器班级:电信系通信工程0902班完成日期:一、需求分析1、编写哈弗曼编译码器,其主要功能有I:初始化。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树。E:编码。利用已建好的哈夫曼树),对从终端输

2、入的正文进行编码,然后从终端输出。D:译码P:印哈夫曼树。将已编码的的哈夫曼树显示在终端上,同时将此字符形式的哈夫曼树。2、测试数据:输入的字符二{a,b,c,d,e}其对应的权值={5,29,7,8,14)二、概要设计1、二哈弗曼树的抽象数据类型定义为:ADTHuffmanTree{数据对象D:D是具有相同性质的数据元素的集合数据关系R:若D=中,则R=①,哈弗曼树为空若DK①,则R={H},H是如下二元关系:在D中存在唯一的称为根的数据元素root,它在关系H下无前驱若D-{root}/①,则存在D-{root}={DLDr}□且DIClDr二中若D1尹中,则D1中存在唯一的数据元

3、素XI,属于H,且存在D1上的关系H1属于H。若Dr/中,则Dr中存在唯一的数据元素Xr,属于H,且存在Dr上的关系Hr属于HH={,,H1,Hr);是一棵符合本定义的哈弗曼树,称为根的左子树。是一棵符合本定义的哈弗曼树,称为根的右子树。基本操作:HuffmanCoding哈弗曼树每个节点的定义:typedefstruct{unsignedintweight:unsignedintparent,1child,rchild;charelemt[20];}HTNode,*HuffmanTree;定义指向哈弗曼树的指针,用于动态分配空间typedefchar**HuffmanCode:哈弗曼

4、树的基本操作VoidHuffmanCoding{〃建立哈弗曼树,求出哈弗曼编码ifreturn;m=2*n-l;//n个叶子的HuffmanTree共有2nT个结点HT=malloc*sizeof);for*p={*w,0,0,0);//给前n个单元初始化for*p={0,0,0,0);//从叶子之后的存储单元清零for(//建Huffman树Select;〃选择parent为0且weight最小的两个结点,HT[s1].parent=i;HT[s2].parent=i;//给双亲分量赋值HT[i].Ichild=sl;HT[i].rchild=s2;//给合并后的内结点赋孩子值HT[

5、i].weight=HT[sl].weight+HT[s2].weight;}〃以上建立了哈弗曼树,以下求哈弗曼编码HC=malloc*sizeof);//分配n个字符编码的头指针向量cd=malloc);//分配求编码的临时最长空间cd[n-l]="”;//编码结束符for//逐个字符求Huffman编码(start=n-l;//编码结束符位置for//从叶子到根逆向求编码ifcd[--start]=“0”;elsecd[--start]="1”;HC[i]=malloc*sizeof);〃为第i个字符编码分配空间,并以数组形式存放各码串指针strcpy;//从cd复制编码串到H

6、C所指空间}free;//释放临时空间}//HuffmanCodingfor(start=n-l;//编码结束符位置for{Ifcd[--start]二“0”;elsecd[一start]=;}〃从叶子到根逆向求编码}//HuffmanCodingVoidEncoding//利用已经建立的哈弗曼树对输入的字符进行哈弗曼编码for//依次判断字符的对应的哈弗曼编码for//查找Mi]在哈弗曼树中的位置strcpy;p二p+strlen;break;//把编码复制接到code后i=0;printf;while//输出字符对应的哈弗曼编码{printf;}//EncodingVoidDeco

7、ding//译码while{ifb=HT[b].Ichild;//当遇到0时指向哈弗曼树的左子树elseifb=HT[b].rchild;〃当遇到1时指向哈弗曼树的右子树}if〃当左右子树均为空时表明已找到对应的字符{al[n++]二HT[b].elemt[0];b=2*sum~2;〃将对应的字符放在数组al中并重新设置b的值继续翻译)i++;}//DecodingVoidPrint//打印哈弗曼树for//从首元素开始,逐个输入哈弗曼树的各项

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。