



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Main.c文件如下#include #include #include #include Haffman.h#define MaxBit 100void main(void) Code *d; int i,j,n=26,m,weight26=0; char c,a=97; FILE *fp; /文本文件指针 if(fp=fopen(data.txt,r)=NULL) printf(无法打开此文件n); exit(0); /中止程序 printf(待压缩的英文文本文件为:n); while(!feof(fp) /当扫描文件内容没有结束时 /读取字符并统计每个字符次数 c=fgetc(fp);putchar(c); if(c=a|c=z); c=c-32; for (i=65;i=90;i+) if(c=i) weighti-65+ ; fclose(fp); HaffNode *myHaffTree=(HaffNode *)malloc(sizeof(HaffNode)*(2*n-1); Code *myHaffCode=(Code *)malloc(sizeof(Code)*n); Haffman(weight,n,myHaffTree); HaffmanCode(myHaffTree,n,myHaffCode); for(m=0;mn;m+) printf(nzimu=%c Weight=%d Code=,a+,myHaffCodem.weight); for(j=myHaffCodem.start;jn;j+) printf(%d,myHaffCodem.bitj); printf(n); 头文件Huffman.h如下#ifndef Haffman_H_INCLUDED#define Haffman_H_INCLUDED#define MaxN 300#define MaxValue 10000typedef struct int weight; /权值 int flag; /标记 int parent; /双亲结点下标 int leftChild; /左孩子下标 int rightChild; /右孩子下标HaffNode; /哈夫曼树的结点结构typedef struct int bitMaxN; /数组 int start; /编码的起始下标 int weight; /字符的权值Code; /哈弗曼编码的结构void Haffman(int weight,int n,HaffNode haffTree)/建立叶节点个数为n,权值数组为weight的哈弗曼树haffTree int i,j,m1,m2,x1,x2; /哈夫曼树haffTree初始化,n个叶节点的二叉树共有2n-1个结点 for(i=0;i2*n-1;i+) if(in) haffTreei.weight=weighti; else haffTreei.weight=0; haffTreei.parent=-1; haffTreei.flag=0; haffTreei.leftChild=-1; haffTreei.rightChild=-1; /构造哈弗曼树的n-1个非叶节点 for(i=0;in-1;i+) m1=m2=MaxValue; x1=x2=0; for(j=0;jn+i;j+) /找出权值最小和次小的子树 if(haffTreej.weightm1) & (haffTreej.flag=0) m2=m1; x2=x1; m1=haffTreej.weight; x1=j; else if(haffTreej.weightm2) & (haffTreej.flag=0) m2=haffTreej.weight; x2=j; /将找出两棵权值最小和次小的子树合并为一棵子树 haffTreex1.parent=n+i; haffTreex2.parent=n+i; haffTreex1.flag=1; haffTreex2.flag=1; haffTreen+i.weight=haffTreex1.weight+haffTreex2.weight; haffTreen+i.leftChild= x1; haffTreen+i.rightChild=x2; void HaffmanCode(HaffNode haffTree,int n,Code haffCode)/由n个结点的哈夫曼树构造哈弗曼编码 Code *cd=(Code *)malloc(sizeof(Code); int i,j,child,parent; /求n个叶节点的哈弗曼编码 for(i=0;istart=n-1; /不等长编码的最后一位n-1 cd-weight=haffTreei.weight; /取得编码对应权值 child=i; parent=haffTreechild.parent; /由叶节点向上直到根节点 while(parent!=-1) if(haffTreeparent.leftChild=child) cd-bitcd-start=0; /左孩子分支编码0 else cd-bitcd-start=1; /左孩子分支编码1 cd-start-; child=parent; parent=haffTreechild.parent; for(j=cd-start+1;j
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年食品增味剂行业市场调研及前景趋势预测报告
- 中国正畸材料行业市场调查研究及投资前景预测报告
- 2025年 昆明市快开门式压力容器R1证考试练习题附答案
- 中国生态畜牧业行业市场运营现状及行业发展趋势报告
- 中国渗晶弹性防水材料行业市场发展前景及发展趋势与投资战略研究报告(2024-2030)
- 2025年 甘肃临夏州中医医院招聘笔试试题附答案
- 2024-2030年中国刨床行业市场深度研究及发展趋势预测报告
- 2024年中国萤石采选行业市场调查报告
- 中国成都市集成电路行业市场运行态势及投资战略研究报告
- 2020-2025年中国气胀轴行业发展潜力分析及投资方向研究报告
- 24春国家开放大学《教育法学》终结性考试(大作业)参考答案
- 小米汽车发布会
- 安全应急管理培训
- 高中化学核心素养(北师大王磊)
- 工程建筑物拆除、清运及建筑废弃物综合招投标书范本
- 保密管理与商业机密保护
- 【低保政策执行过程中产生的消极效果及优化建议分析11000字(论文)】
- 医院护理培训课件:《妊娠剧吐的护理查房》
- 幼儿园小班数学《图形王国历险记》课件
- 造林(乔木林、灌木林、经济林)单元工程质量评定表(2023版)
- 必修2册重点知识点提纲 高中地湘教版
评论
0/150
提交评论