- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数据结构》课程设计上机实习报告课 设 题 目Huffman编码和解码班 级学 生 姓 名学 号指 导 教 师时 间2015.12-2015.1一、设计目的1.进一步熟悉C语言开发环境,熟悉用C语言完成一个应用程序的设计过程,掌握有关编辑、调试和整合程序的方法和技巧。2.通过此设计,了解《数据结构》课程中霍夫曼编码的的有关内容,明确其操作,熟悉其设计,同时学习到有关位向量的内容,对文件掌握加深二、设计内容Huffman编码与解码 (必做)(Huffman编码、二叉树)[问题描述]对一篇英文文章(大于2000个英文字符),统计各字符出现的次数,实现Huffman编码,以及对编码结果的解码。[基本要求](1) 输出每个字符出现的次数和编码,其中求最小权值要求用堆实现。(2) 在Huffman编码后,要将编码表和英文文章编码结果保存到文件中,编码结果必须是二进制形式,即0 1的信息用比特位表示,不能用字符’0’和’1’表示。(3) 提供读编码文件生成原文件的功能。三、数据结构说明在该程序中我仅仅使用了两个结构体来完成编码,用位域来实现bite流存储:const int MAXSIZE=300;//定义一次分配的Huffman储存单词最大量为500 const int OVERFLOW = 0;const int ERROR = 0;const int LineCountNum=500;typedef struct WordCount{char Word;//存放字符int freq; int parent , lchild , rchild;//存放亲子节点位置 int place;//用来保存第一次堆排序后,建立霍夫曼表前的相对位置char *HuffmanCode;//存放霍夫曼编码}WordCount , *WC;//存放单词结点的结构体typedef struct HuffmanTree{WC w;int Number;//存储有多少数据存入}HuffmanTree , *HTree; typedef struct {unsigned int a:1;}bite;//设置位段,存储一个bite //**************操作函数声明***********void InitHuffmanTree(HTree H);//初始化霍夫曼树void HeapSort(WC W , int Number , int choice);//堆排序核心函数void HeapAdjust(WC W , int down , int up , int choice);//堆排序调整函数,实现两种排序void HuffmanCoding(HTree H , WC HT); //求霍夫曼树和霍夫曼编码表void ShowHuffmanTree(HTree H);//输出霍夫曼树void Select(WC W , int i , int s1 , int s2);//选择1-i-1之间最小的两个数,且parent为0,用s1,s2返回void GetTheDeCode(HTree H);//将编码结果写入函数void PutTheDeCode(FILE *fp1 , FILE *fp2);//将编码结果解码得到文章void CountTheWord(HTree H , FILE *fp);//记录单词权值void ShowTheEassy(FILE *wp);//展示文章四、详细设计首先我给出了编码和解码的菜单供其选择在编码功能中,我先通过CountTheWord()函数进行单词权值记录,然后进入编码功能,值得一提的是,编码时我给堆排序设计了两种排序形式——对权值的排序和对位置的排序,以达到选择两个最小的权值结点的最优时间复杂度的目的,此功能通过switch实现,但要给编码结构体中放置一个place空间,这也从侧面反映了时间和空间矛盾的地方(值得一提的是,有些编码并不可见且有特殊含义,如换行符,所以将字符放入文件中时,并不对其进行处理,读出是进行顺序读出)编码结束后将编码结果,对应字符分别存放在文件中,然后对整篇文章进行编码解码时依据霍夫曼编码的唯一性进行比较求解,遇到同样的字符即返回对应的字母并写入解码文件中五、调试与测试(测试数据:献给艾米莉的玫瑰)首先打开文件进行字符权值统计并输出结果(有些符号不可见,所以无法显示)然后对其进行堆排序输出编码表,及其对应亲子关系(#号代表为父结点)输出编码结果(可以轻易看出编码具备唯一性)将编码写入文件,一下显示文件部分内容位域存储的bite编码文档编码对应的字符顺序存储(可以看到因为换行符的存在,自动换行了)解码(将文章在命令行显示,也写入了翻译文档(以d
文档评论(0)