- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构_哈夫曼编码器
题目:编制一个哈夫曼编码器。
需求分析
用户以文件( data.dat)的形式输入字符的权值和要编译的信息:先是要编译的信息,以句号结束。接着在是字符个数。最后是按字符、字符的权值的顺序写入字符信息。
结果以文件(printf.dat)形式呈现。
测试数据为:
THIS PROGRAM IS MY FAVORITE.27 186A64B13C22D32E103F21G15H47I57J1K5L32M20N57O63P15Q1R48S51T80U23V8W18X1Y16Z1
程序执行的命令:
读取编码和要编码的信息
创建哈夫曼编码树
进行编码
将结果输入文件中
概要设计
设定树的抽象数据类型定义:
ADT Tree{
数据对象D:D是具体的相同特性的数据元素的集合。
数据关系R:若D为空集,则称为空集;
若D仅含一个数据元素,则R为空集,否则R={H},H是如下二元关系:
在D中存在唯一的称为数据元素ROOT,它在关系下无前驱;
若D-{ROOT}不等于Φ,则存在D-{ROOT}的一个划分D1,D2,…Dm(m0)。对任意J不等于K(1=J.K=M)有Dj∩Dk=Φ,且对任意i(1=i=m),唯一存在数据元素Xi∈Di,有
ROOT,Xi∈H。
对于D-{ROOT}的划分,H-{ROOT,X1,…,ROOT,Xm}有唯一的一个划分H1,H2,…,Hm(m0),对于任意J不等于K(1=j,k=m)有Hj∩Hk=Φ,且对任意i(1=i=m),Hi是Di上的二元关系,(D,{Hi})是一棵符合本定义的树,成为根ROOT的子树。
基本操作:
void HuffmanCoding(HuffmanTreeHT,HuffmanCodeHC,Char_weiht *zifu,int zinum)
操作结果:创建哈夫曼树。
void Select(HuffmanTree HT,int num,int s1,int s2)
初始条件:哈夫曼树存在。
操作结果:返回权值最小且父节点为0的节点。
void Do_Huffman(char*string,Char_weight *zifu,HuffmanCode HC)
初始条件:哈夫曼树存在。
操作结果:将编码存入文件中。
}
本程序包含三个模块
主程序模块
树模块
详细设计
#includestdio.h
#includestdlib.h
#includestring.h
#define MAXCHAR 30
#define MAXSTRING 100
typedef struct {
char a;
int weight;
}Char_weight;
typedef struct{
int weight;
int parent,lchild,rchild;
}HTNode,*HuffmanTree;
typedef char **HuffmanCode;
void HuffmanCoding(HuffmanTree HT,HuffmanCode HC,Char_weight *zifu,int zinum);
void Select(HuffmanTree HT,int num,int s1,int s2);
void Do_Huffman(char *string,Char_weight *zifu,HuffmanCode HC);
int zinum;
int main()
{
HuffmanTree HT;
HuffmanCode HC;
int i;
FILE *fp;
Char_weight zifu[MAXCHAR];
char string[MAXSTRING]={0},temp;
if(NULL==(fp=fopen(data.dat,r)))
{
printf(open file data wrong\n);
exit(1);
}
fscanf(fp,%c,temp);
for(i=0;.!=temp;i++)
{
string[i]=temp;
fscanf(fp,%c,temp);
}
string[i]=\0;
fscanf(fp,%d,zinum);
for(i=0;izinum;i++)
{
fscanf(fp,%c,(zifu[i].a));
fscanf(fp,%d\n,(zifu[i].weight));
}
if(EOF==fclose(fp))
{
printf(close file data wrong\n);
exit(1);
}
HuffmanCoding(HT,HC,zifu,zinum);
Do_Huffman(string,z
您可能关注的文档
最近下载
- 高中物理24个题型.docx VIP
- 高中化学——高中化学知识清单.docx VIP
- 人教版高中物理高考必考重点知识点总结完整版(必修+选修).pdf VIP
- 2023年中考英语专题复习——冠词+答案.pdf VIP
- 2023年中考英语真题分项汇编(全国通用):专题04 单项选择之时态和语态(第02期)(解析版).docx VIP
- 【中考真题】2024年新疆维吾尔自治区中考语文试卷(附答案) .pdf VIP
- 2024年兰州市高三诊断考试(一诊)英语试卷(含官方标准答案)后附原卷扫描版.docx
- 2024年黑龙江哈尔滨市中考数学真题卷及答案解析.pdf VIP
- 2025年春新人教版物理八年级下册全册教案.pdf
- 五年级综合算式计算题 100题.doc
文档评论(0)