- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
                        查看更多
                        
                    
                压缩程序(哈弗曼编码算法);需求分析;概要分析;采用顺序表实现对Huffman编码的存储
     //---------------Huffman编码存储结构------------------
typedef struct
{
    char    ch;
    int      start;
    char    bits[n+1];
}HuffmanCode;
typedef HuffmanCode HCode[n];
ch存放对应的字符,start存放Huffman编码在字符数组bits[]中开始的位置。
;抽象数据;FilePrint(HTree T,HCode H,int N)
初始条件:求得Huffman编码以及 各节点的权值。
操作结果:将求得的数据分别存放在HuffmanCode.txt、Char.txt、Weight.txt中。
FileWrite(HCode H,int N,char filename[])
初始条件:求得Huffman编码以及 各节点的权值。
操作结果:将文档翻译成Huffman编码以字符形式存放在File.txt中。
FileConvert(void)
初始条件:File.txt存在。
操作结果:将字符形式的Huffman编码翻译成二进制形式,每首季8比特就通过位操作合并成一个字节写入文件code.txt中,最后不足8 位时将最后的几位存放在Tail.txt中。
FileRead(HTree T,HCode H)
初始条件:压缩生成的HuffmanCode.txt、Char.txt、Weight.txt存在。
操作结果:读取字符及其权值和其Huffman编码。;FileExtract(void)
初始条件:压缩结果文件Code.txt和tail.txt存在。
操作结果: 将code.txt和tail.txt中的字符写成编码的二进制字符形式,写进file00.txt。
FileTrans(HTree T,HCode H,int N)
初始条件: 已生成File00,txt并已求得各个字符的Huffman编码,Huffman树已建立。
操作结果:将Huffman编码翻译成原文件,写入translated.txt。
}ADT
还需要包含调用若干库文件:stdio.h, malloc.h, string.h。
;主函数
;采用C语言的编程方法在VC++6.0环境下实现本题目的要求。主程序流程图;压缩部分;;       由于文档限于英文文章,所以字符的ASC II码限于0~150。依次读取文档的各个字符,计算每个字符出现的次数为权值,再将数组压缩:没有出现的字符从数组中删去。返回文档出现不同字符的个数
算法如下:
1、统计字符出现的频率,即权值的函数int apprate(char *s,int cnt[],char str[]);
方法具体实现如下:
定义两个数组,分别存放大写和小写英文字母。
a. 将两个数组初始化都为0.
b. 如果取出的字符是小写字母,则将小写字母转换为数字,每一个字符对应一个数字,同一个字符出现一次频率就加1???直到全部统计出为止,如果取出的是大写字母,方法如小写字母的实现方法。
c. 再将转换都的数字再转换为相应的字符,以便为下面的建树方便调用。
    具体代码如下:
    。;int FileRead(int count[],char s[],char filename[])
{
    int i=0,N=0,k=0,temp[n];
    char c;
    FILE *rf;
    rf=fopen(filename,r);
    if (rf==NULL)
       {
           printf(cannot open file\n);
           exit(0);
       }
    for (i=0;in;i++)
       {
           temp[i]=0;
           count[i]=0;
       }
    while (!feof(rf))
       {
           c=fgetc(rf);
           k=c;
           temp[k]++;
           i++;
       }
    fclose(rf);
    for (i=0;in;i++)
       {
           if (temp[i]!=0)
              {
                  s[N]=i;
                  count[N]=temp[i];
              
                您可能关注的文档
最近下载
- 轴类零件图纸.doc VIP
- 曲臂车高空作业施工方案.docx VIP
- 外研版英语(三起点)六年级上册 Module4 大单元学历案教案 教学设计附作业设计(基于新课标教学评一体化).docx VIP
- 2025年六安社区考试试题及答案.doc VIP
- T_CSBZ 004-2024 石材护理技术规范.docx VIP
- 学校建设项目施工全流程指南.docx VIP
- 《航空动力装置》模拟试卷A..doc VIP
- 2026年鄂尔多斯职业学院单招综合素质考试题库必考题.docx VIP
- 第五单元习作:生活万花筒(范文点评)-2023-2024学年四年级语文上册单元作文能力提升(统编版).docx VIP
- JIS B2220-2004 英文版 钢制管法兰(日文).doc VIP
 原创力文档
原创力文档 
                        

文档评论(0)