欢迎来到天天文库
浏览记录
ID:56779766
大小:121.50 KB
页数:19页
时间:2020-07-09
《数据结构课程设计哈夫曼编码译码器.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、.西安郵電學院数据结构课程设计报告题目1:哈夫曼编码/译码器题目2:学生信息管理系统系部名称:通信工程系专业名称:通信工程班级:****学号:*****Word资料.学生姓名:****指导教师:*****时间:2009年12月16日至2009年12月25日题目1.哈夫曼编码/译码器一、课程设计目的通过对哈夫曼编码/译码器的实现,熟悉了解Huffman树的创建过程以及存储结构,对Huffman编码/译码过程及原则有了更深层次的认识,锻炼了动手能力,使知识更好的学以致用,为解决数据压缩问题提供方法。二、课程设计内容通过统计文件中各
2、字符的出现频率,建立Huffman树,再通过建立的已经Huffman的树,对文件中各字符进行编码,将结果存入新的文件中,然后从文件中读取Huffman编码,进行解码,结果存入新的文件中,并与源文件进行比较。三、需求分析1.统计字符频率:存文件中读入字符,并对各字符出现频率进行统计;2.建立Huffman树:将各字符出现的频率作为权值,建立Huffman树;3.Huffman编码:通过已经建立的Huffman树,对个各字符进行编码,并存入新的文件中;4.译码:读取存放Huffman编码的文件,对文件中编码进行译码,把译码结果存入
3、新的文件中;5.结果验证:将译码结果与原文件内容进行比较;四、概要设计1.系统结构图(功能模块图)Word资料.开始main()统计字符频率创建Huffman树对文件编码对编码译码出现次数字符名称初始化结点赋值Huffma编码存入文件读取编码存入文件对编码译码对编码译码成功失败2.功能模块说明1:统计字符频率:定义结构体typedefstructstr{chardata;charnum;}str;其中data域存放字符名称,num域存放字符出现频率,读取文件ywq1.txt,通过循环比较将结果赋入S2[128]中;2:创建Hu
4、ffman树:定义结构体typedefstruct{chardata;intweight;intparent;intlchild;Word资料.intrchild;}HTNode,HuffmanTree[M+1];作为Huffman树存储节点类型,调用CrtHuffmanTree()函数,初始化各节点均为0;然后将存储字符频率的数组S2的值赋值给各节点,字符出现频率作为权值,创建Huffman树;3:对文件编码:定义结构体typedefstruct{chardata;charbits[N+1];}CodeNode,Huffma
5、nCode[N];作为HuffmanCode的存储类型,调用CrtHuffmanCode()函数,从叶子节点向上回溯,是lchild则赋值‘0’,是rchild则赋值为‘1’,对各字符编码,再调用WriteToFile()函数,将结果写入文件ywq2.txt中;4:对文件译码:读取编码文件ywq2.txt中数据,调用DecodHuffmanCode()函数,从根节点开始,读取‘1’,走向rchild,读取‘0’,走向lchild,直到叶子节点,将叶子节点data域的值写入文件ywq3.txt中;五、详细设计及运行结果1.读文件
6、统计字符频率(read()函数中实现):Word资料.打开源文件ywq1.txt读文件内的字符,初始化数组s1文件是否结束将字符存入数组S1[ch].num++读下一个字符给数组末尾加上结束标志“ ”关闭文件是否开始结束源文件ywq1.txt:Word资料.运行结果:2:创建Huffman树,CrtHuffmanTree():初始化结构体数组htCrtHuffmanTree()有n棵二叉树n>1选权值最小2个二叉树权值相加得新二叉树n-1n=1建立Huffman树结束运行结果:Word资料.3:Huffman编码,CrtHu
7、ffmanCode();CrtHuffmanCode()根cd[--start]=‘0’cd[--start]=‘1’否LchildRchildcd[start]赋给hc[i].bits是结束对应字符编码写入文件ywq2.txt运行结果:Word资料.编码文件ywq2.txt:3:译码,DecodHuffmanCode():Word资料.DecodHuffmanCode()打开文件ywq2.txt读取字符ch文件结束否否找根节点ch=‘0’,找lchild;ch=‘1’,找rchild;叶子节点是是保存ywq3.txt是结束运
8、行结果:文件ywq3.txt:Word资料.4:结果验证:比较源文件ywq1.txt与译码文件ywq3.txt可知,译码结果与源文件一致。Compare()读取ywq1.txt中的字符,存入s1,并输出,读取ywq3.txt中的字符,存入s2,并输出,si[i]==s2[i]
此文档下载收益归作者所有