哈弗曼编码译码(c++实现)

上传人:ji****en 文档编号:107693727 上传时间:2019-10-20 格式:DOC 页数:21 大小:166.40KB
返回 下载 相关 举报
哈弗曼编码译码(c++实现)_第1页
第1页 / 共21页
哈弗曼编码译码(c++实现)_第2页
第2页 / 共21页
哈弗曼编码译码(c++实现)_第3页
第3页 / 共21页
哈弗曼编码译码(c++实现)_第4页
第4页 / 共21页
哈弗曼编码译码(c++实现)_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《哈弗曼编码译码(c++实现)》由会员分享,可在线阅读,更多相关《哈弗曼编码译码(c++实现)(21页珍藏版)》请在金锄头文库上搜索。

1、 数据结构(C+实现) 实训报告题 目:哈弗曼编码与译码专 业: 信息管理 班 级: 12512201 学 生: 吴昊翀 学 号: 1251220117 指导老师: 黄建灯 目录一、实训要求4二、课题分析和设计41. 基本需求分析42. 对应的结构体或类5三、主要功能界面71.主界面72. 读取文章并对字符编码83. 哈弗曼编码信息94.文章编码10四、 总结12五、附录13一、实训要求n 输入为:一段英文或中文的文章(原文)n 对输入的文章构造哈夫曼树n 生成对应的编码n 输出为:原文所对应的编码(译文)n 根据已经生成的编码表,输入任意的译文可以得到对应的原文二、课题分析和设计1. 基本需

2、求分析 1.在通信过程中,为了提高信道利用率,缩短信息传输时间降低传输成本,需要一编码译码器。 2.此哈弗曼编码译码器应具有编码译码的双向功能,即在发送端通过编码系统对传入的数据进行编码。 3.在接收端将数据译码,将具有两项功能的编码译码器用于双工信道就可满足,双工信道的双向编译功能。 4.输入某段报文是,系统将自己完成编译输出。1. 程序设计流程 (1)文字表述开始进入功能选择界面,包含五种操作:1. 读取文章并对字符编码。 2.哈夫曼编码信息。 3.文章编码。 4.文章译码。 5.退出程序。 (2) 操作 1:给定一篇文章,统计字符出现的概率,并根据概率建立哈弗曼树,并利用哈弗曼树对字符进

3、行哈弗曼编码。 2:显示哈弗曼编码信息,包括字符,字符出现的概率,哈弗曼编码。 3:对文章进行译码,显示译码信息,并保存。 4:对文章进行译码,显示并保存 (3)流程图 程序开始程序主界面哈弗曼编码信息读取文章并对文章编码退出程序文章译码文章编码保存译码显示译码返回主界面返回主界面保存编码显示编码2. 对应的结构体或类(1)定义class Htnote public: char name; /字符名 double weight; /权重 int lchild; /左孩子 int rchild; /右孩子 int parent; /父亲 Htnote() weight = 0; lchild =

4、 -1; parent = -1; rchild = -1; ; (2)定义字符和出现的次数class Name public: int num; /字符出现的次数 char pname; /字符名 double lweight; /权值 Name() num = 0; lweight = 0; ;(3)定义字符种类总数和存储信息class GetName public: char namefmax2; int n; /字符的种类 int sum; /字符的总数 Name lettermax1; /存储字符信息的类的数组 GetName() sum = 0; n = 0; (4) 定义编码类c

5、lass CodeNode/编码类public: char ch; /存储字符 char bitsmax1; /存储编码;class Function public: GetName L; int fn; /定义哈夫曼数组大小 Htnote HuffmanTmax3; /哈夫曼数组 CodeNode Codemax1; /字符编码数组 Function() fn = 0; 三、主要功能界面1.主界面2. 读取文章并对字符编码3. 哈弗曼编码信息4.文章编码5.文章译码4、 总结 为期两个星期的课程设计终于完美落下帷幕,回想起前前后后还是有苦有甜。当拿到课题是感觉还行!结果前几天做程序的代码时一

6、点都不会做,课本也看不懂课程进度可以说是原地踏步!只能怪自己吧!老师讲的有时能听懂有时就听不懂,到头来今天的局面,当时以为自己完成不了任务。过程中甜的是有老师和同学的帮忙,总算圆满完成任务。通过本次实训让我重新学习了算法和数据结构这门课程,也懂得了用代码来建立哈弗曼树,编码译码双向功能! 上机实验,将理论的知识与实际结合起来。增强了自己的动手能力,觉的任何知识都不是轻而易举的学懂,必须花点心思去学,必须要付出努力。以后上课就不能像以前那样,要好好学习这样不辜负老师对我们的心意。最后衷心感谢帮助我完成程序设计的老师和同学表示感谢!五、附录 全部代码:#ifndef HUFFMANFUNCTION

7、_H#defineHUFFMANFUNCTION_H#include #include#include#include#define max1 150#define max2 50#define max3 256using namespace std;class Htnote public: char name; /字符名 double weight; /权重 int lchild; /左孩子 int rchild; /右孩子 int parent; /父亲 Htnote() weight = 0; lchild = -1; parent = -1; rchild = -1; ;class N

8、ame public: int num; /字符出现的次数 char pname; /字符名 double lweight; /权值 Name() num = 0; lweight = 0; ;class GetName public: char namefmax2; int n; /字符的种类 int sum; /字符的总数 Name lettermax1; /存储字符信息的类的数组 GetName() sum = 0; n = 0; void GetWeight()/得到字符的权值 for (int i = 0; i n; i+) letteri.lweight = (double) le

9、tteri.num / sum; /出现的次数除总数得到权值 int ReadLetter() ifstream input; cout 请输入文件名: namef; input.open(namef); /打开文件 if (input.fail() cout 该文件不存在! endl; return 0; char ch; ch = input.get(); letter0.pname = ch; letter0.num+; sum+; while (!input.eof() /读取文件中的所有字符 int tag = 0; ch = input.get(); for (int i = 0;

10、 i n + 1; i+) if (letteri.pname = ch) letteri.num+; sum+; tag = 1; if (tag = 0) n+; lettern.pname = ch; lettern.num+; sum+; sum-; input.close(); GetWeight(); /得到字符权值 ;class CodeNode/编码类public: char ch; /存储字符 char bitsmax1; /存储编码;class Function public: GetName L; int fn; /定义哈夫曼数组大小 Htnote HuffmanTmax3; /哈夫曼数组 CodeNode Codemax1; /字符编码数组 Function() fn = 0; void CharHuffmanTCoding()/编码功能实现 int i, f, c; char cd1000; /暂时存储编码的数组 int start; /编码读取起始位置 cdL.n = 0; for (i = 0; i L.n; i+) Codei.ch = HuffmanTi.name; /字符信息

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号