ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:52.84KB ,
资源ID:5913937      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-5913937.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(哈夫曼编码及其应用Word文档下载推荐.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

哈夫曼编码及其应用Word文档下载推荐.docx

1、 /* INT_MAX 等*/stdio.h /* EOF(=Z 或F6),NULL */stdlib.h /* atoi() */io.h /* eof() */math.h /* floor(),ceil(),abs() */process.h /* exit() */* 函数结果状态代码*/#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1/* #define OVERFLOW -2 因为在math. h 中已定义OVERFLOW 的值为3,故去掉此行*/typedef int Sta

2、tus; /* Status 是函数的类型,其值是函数结果状态代码,如OK 等*/typedef int Boolean; /* Boolean 是布尔类型,其值是TRUE 或FALSE */3、新建文件/C/C+ Header File,选中“添加到工程的复选按钮”,输入文件名“huffmanDef.h”,按“确定”按钮,在显示的代码编辑区内输入:#define uint unsigned int#define MAXSIZE1 50#define MAXSIZE2 500int t,count,num; /采用全局变量定义count存储字符个数,num存储从文件读取内容的个数uint wM

3、AXSIZE1;char cMAXSIZE1,dataMAXSIZE2; /采用全局变量定义的数组用于存储从文件读取的内容typedef char *HuffmanCode; /动态分配数组存储哈夫曼树编码表void Start_Screen() printf(nnn);t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *tnt* *tnt* * 哈夫曼编译码系统 * *tnt* 1.更新哈夫曼编码信息 *tnt* 2.显示哈夫曼树及哈夫曼编码 *tnt* 3.将输入的文本编译为报文 *tnt* 4.将输入的报文编译为

4、文本 *tnt* 5.将已有的文本编译为报文 *tnt* 6.将已有的报文编译为文本 *tnt* 7.退出系统 *tnt* 请输入您的选择选择: scanf(%d,&t);4、新建文件/C/C+ Header File,选中“添加到工程的复选按钮”,输入文件名“huffmanAlgo.h”,按“确定”按钮,在显示的代码编辑区内输入:PrintHuffmanTree(HuffmanTree ht,int n) int i,m; m=2*n-1;t哈夫曼树及哈弗曼编码nn 序号 字符 权值 双亲 左孩子 右孩子n for(i=0;ich,hci); ht+;nnnnnnnnn/将哈夫曼树的初始信息

5、写入文件void WriteHuffmanTree() FILE *fp; uint we; char ch;请输入你需要的字符和权值,用#结束输入:n if(fp=fopen(DataFile.data,w)=NULL)nError on open %s!a exit(1);n%cch); while(ch!=#) scanf(we); fprintf(fp,%c,ch);%5dn,we); ch=getchar(); fclose(fp);/读哈夫曼树的初始信息void ReadHuffmanTree() int i=0; count=0;r /表示程序非正常退出 while(!feof(

6、fp) fscanf(fp,ci); if(ci=n) continue; /读到换行符,跳过,读下一行%5dwi); count+; i+;/将内容写入文件void WriteDataFile(char *fileName) num=0; if(fp=fopen(fileName,fileName); num+;/读文件内容void ReadDataFile(char *fileName) if(datai=datai); datai=0;/编码,用已及建好的哈夫曼树,对所输入的文件进行编码形成报文void EnCoding(HuffmanCode hc) int i=0,j;请输入您需要进

7、行编码的文本,以#结束: WriteDataFile(ToBeTran.data ReadDataFile(Code.txtnum; ) putchar( for(j=0;jlchild!=-1) p=&htp-lchild; else if(datai=1rchild!rchild; else fprintf(fp,p- printf( p=& if(datai!) i-;/编码,用已及建好的哈夫曼树,对已有的文件进行编码形成报文void AlEnCoding(HuffmanCode hc) FILE *fp1,*fp2; if(fp1=fopen(feof(fp1) datai=fgetc

8、(fp1); num=i; fclose(fp1); if(fp2=fopen( fprintf(fp2, fclose(fp2);/译码,用用已及建好的哈夫曼编码,对已有的报文进行解译形成文本void AlDeCoding(HuffmanTree ht)an datai-1= fprintf(fp2,void main() HuffmanTree HT; HuffmanCode HC; Start_Screen(); ReadHuffmanTree(); /读哈夫曼树原始信息 CreateHuffmanTree(&HT,count); /创建哈夫曼树 HC=HuffmanCoding(HT,

9、count); /创建哈夫曼编码 while(1) switch(t) case 1: WriteHuffmanTree(); /更新哈夫曼树信息 ReadHuffmanTree(); /读哈夫曼树初始化信息 CreateHuffmanTree(& HC=HuffmanCoding(HT,count); break; case 2: PrintHuffmanTree(HT,count); /输出哈夫曼树 PrintHuffmanCode(HT,HC,count); /输出哈夫曼编码 exit(0); /表示程序正常退出 case 3: EnCoding(HC); /编码,对所输入的文本进行编码

10、形成报文 case 4: DeCoding(HT); /译码,对所输入的报文进行解译形成文本 case 5: AlEnCoding(HC); /编码,对所已有的文本进行编码形成报文 break; case 6: AlDeCoding(HT); /译码,对所已有的报文进行解译形成文本 case 7: exit(0); default:a system(cls /清屏 Start_Screen(); Start_Screen(); 5、新建文件/C+ Source File,选中“添加到工程的复选按钮”,输入文件名“huffmanUse.cpp”,按“确定”按钮,在显示的代码编辑区内输入:#inc

11、ludepubuse.hhuffmanDef.hhuffmanAlgo.hHuffmanTree HT;HuffmanCode HC;int Min(HuffmanTree bt,int m) int i,temp; uint k;i+) /取k等于首个parent为0的权值 if(bti.parent=0) k=bti.weight; temp=i; for(i=i+1;i+) /逐个与其他权值进行比较,并返回在parent为0下权值最小的序号 if(bti.weight ch=ci;weight=wi;parent=0;lchild=p-rchild=-1; /初始化二叉树结点,paren

12、t置为0,lchild,rchild均置为-1 p+; for(i=n;i+) /构造n-1个空二叉树用于存储新树根结点ch=* Select(*HT,i,&s1,&s2); (*HT)s1.parent=(*HT)s2.parent=i; (*HT)i.lchild=s1; (*HT)i.rchild=s2; (*HT)i.weight=(*HT)s1.weight + (*HT)s2.weight;/从叶子节点到根节点逆向求哈弗曼编码HuffmanCode HuffmanCoding(HuffmanTree HT,int n) int i,f,top; uint t; char *hc; HC=(HuffmanCode )malloc(n*sizeof(char *); /动态申请指针存储哈夫曼编码 hc=(char *)malloc(n*sizeof(char); /申请哈夫曼编码的工作空间 hcn-1= top=n-1; t=i; f=HTi.parent; while(f!=0) if(HTf.lchild = t) hc-top= else hc-top= t=f; f=HTt.parent; HCi=(char *)malloc(n-top)*sizeof(char); /为已申请的指针分配一维数组存储哈夫曼编码 strcpy(HCi,&hct

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2