- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
哈弗曼编码/译码器
一、程序的功能分析
构造哈夫曼树及哈夫曼编码:从终端读入字符集大小n、n个字符以及n个对应的权值,建立 哈夫曼树;利用已经建好的哈夫曼树求每个叶结点的哈夫曼编码,并保存。
编码:利用已构造的哈夫曼编码对“明文”文件中的正文进行编码,然后将结果存入“密文 文件中。
译码:将“密文”文件中的0、1代码序列进行译码。(读文件)
打印“密文”文件:将文件以紧凑格式显示在终端上,每行30个代码;同时,将此字符形式 的编码文件保存。
打印哈夫曼树及哈夫曼编码:将已在存中的哈夫曼树以凹入表形式显示在终端上,同时将每个 字符的哈夫曼编码显示出来;并保存到文件。
二、基本要求分析
1、输入输出的要求
按提示容从键盘输入命令,系统根据用户输入的需求在保证界面友好的前提下输出用户所需信恩, 并按要求保存文件,以便保存备份信息。
2、测试数据
(1) .令叶子结点个数N为4,权值集合为{1,3,5,7),字符集合为{A,B,C,D),且字符集与权值集
合 对应。
(2) .令叶子结点个数N为7,权值集合为{12.6,8,18,3.20,2),字符集合为{A,B,C,D,E,F,G}, 且字符集与权值集合一一对应。
(3) .请自行选定一段英文文本,统计给出的字符集,实际统计字符的频度,窪立哈夫曼树,构 造哈夫曼编码,并实现其编码和译码。
三、概要设计
主模块的流程及各子模块的主要功能
主函数负责提供选项功能,循环调控整个系统。
创建模块实现接收字符、权值、构建哈夫曼树,并保存文件,此功能是后续功能的基础。
编码模块实现利用已编好的哈夫曼树对每个字符进行哈夫曼编码,即对每个字符译出其密文代码. 并保存文件。
译码模.实现对用户输入的密文翻译成明文,即用户所需的字符串信息。
输出模块实现对已编好的哈夫曼树以凹入表的的形式输出。
模块之间的层次关系
?
四、详细设计
采用C语言定义的相关数据类型
结点的类型定义描述如下:
define N 叶子结点的个数
typedef strcut
(int weight; /*结点权值*/
int parent;
int Ichild;
int rchild;
IINodeType;
HNodeType HNode[2*N-l];
编码的类型定义描述如下:
^define MAXBIT 10
typedef struct
(int bit[MAXBIT];
int start;
JIICodeType;
HCodeType HCodetN];
各模块伪算法
(1)主函数
int mainO
r
i
do:
{
界面友好设计;
cout?各个选项功能容;
cinch;
容错处理; switch(ch)
(
case 1:
IwhileO;
return 0;
(2)系统初始化模块
void create() 〃系统初始化
I
for(i=0;i2*N-l;i++) 〃数组 lINode 初始化
0;
从键盘接收字符;
for(i=0;iN;i++)
( cout?w 输入字符 w?endl;
cin?HNode[i]. data;
接收权值;
构造哈夫曼树;
for(i=0;iN-l;i++)
{ 找最小和次小两个权值;
将找出的两棵子树合并为一棵子数;
将已建好的哈夫曼树存入文件hfmtree. txt中;
调用哈夫曼编码子函数;
}
void HaffmanCodeO //对哈夫曼树进行编码
I
从hfmtree. txt文件中读出哈夫曼树的信息存入存HNodeType a[2*N-l]; 求每个叶子结点的哈夫曼编码;
for(i=0;iN;i++)
(
从叶节点回溯,回溯到根结点(parmt=?l);
记录回溯路径;
I
打印出每个字符对应的密文; 将密文信息存入文件codefile, dat中;
)
编码模块
void HfmanCodeO 〃对用户输入的字符串进行编码
f
I
提示输入信息;
接收用户输入的要编译的字符串;
cins;
〃从文件中读取哈夫曼编码信息
infile, open (F: Wcodefile. dat \ ios:: in| ios:: binary); 〃读文件 for(i=0;iN;i++) 〃将文件中的数据读出放在temp[i]
〃从文件中读字节到指定的存储器区域。
infile, read ((char*)tcmp[i]fsizeof(temp[i])): 循环实现将用户输入的字符串转换成对应的密文,并保存; 将保存结果存入密文文件;
译码模块
void UanslateQ//译码
{
从文卄lifmtiee.txt中读岀哈夫曼信息到内存temp[2*N.l]; 从密文文件中读取用户输入的字符串的密文信息到内存c: 追溯结点位置初始定位到根结点temp[2
您可能关注的文档
- 水泥混凝土工程施工组织设计方案.docx
- 35KV智能变电站设计方案.docx
- 五年级下册数学教案-确定位置二北师大版.docx
- 生物医学数据采集与集成系统需求说明书.docx
- 仓库管理工作实施方案.docx
- 宝鸡市眉县城区地热井钻探施工项目.docx
- 信用网打印信用报告操作指引.docx
- 《中医药科技成果转化申报审批展示系统》软件说明.docx
- 新生儿先天性心脏病筛查项目技术规范(试行)新生儿先天性心脏病筛查.docx
- 校本研修报告册(语文).docx
- 养老评估师中级行为面试题库及案例分析.docx
- 面试培训督导时考察其课程理解能力的题目.docx
- 税务专员面试中关于增值税政策的常见问题解答.docx
- 2025宁波市医疗保障局局属事业单位宁波市医疗保障基金管理中心招聘事业编制工作人员1人备考试题附答案.docx
- 2025咸宁市汉口银行咸宁嘉鱼支行招聘笔试历年题库附答案解析.docx
- 2025北京人才发展战略研究院招录笔试备考题库附答案.docx
- 2025四川成都市龙泉驿区青台山中学校秋季教师招聘22人笔试试题附答案解析.docx
- 2025台州市银龄讲学计划教师招募13人笔试参考试题附答案解析.docx
- 2025中国铁建公开招聘42人笔试题库附答案.docx
- 2025中智咨询研究院社会招聘笔试参考题库附答案.docx
原创力文档


文档评论(0)