Lab05 树结构的应用

学号: 姓名: 实验时间:2011.5.24

1.问题描述

哈弗曼树的编码与译码

— 功能:实现对任何类型文件的压缩与解码

— 输入:源文件,压缩文件

— 输出:解码正确性判定,统计压缩率、编码与解码速度

— 要求: 使用边编码边统计符号概率的方法(自适应Huffman编码) 和事先统计概率的方法(静态Huffman编码) 。

2.1程序清单

程序书签:

main函数

压缩函数

select函数

encode函数

解压函数

#include

#include

#include

#include

#include

struct node{

long weight; //权值

unsigned char ch;//字符

int parent,lchild,rchild;

char code[256];//编码的位数最多为256位

int CodeLength;//编码长度

}hfmnode[512];

void compress();

void uncompress();

//主函数

void main()

{

int choice;

printf("请选择1~3:\n");

printf("1.压缩文件\n");

printf("2.解压文件\n");

printf("3.退出!\n");

scanf("%d",&choice);

if(choice==1)compress();

else if(choice==2)uncompress();

else if(choice==3)return;

else printf("输入错误!");

}

//压缩函数

void compress()

{

int i,j;

char infile[20],outfile[20];

FILE *ifp,*ofp;

unsigned char c;//

long FileLength,filelength=0;

int n,m;//叶子数和结点数

int s1,s2; //权值最小的两个结点的标号

char codes[256];

long sumlength=0;

float rate,speed;

int count=0;

clock_t start1, start2,finish1,finish2;

double duration1,duration2;

void encode(struct node *nodep,int n);//编码函数

int select(struct node *nodep,int pose);//用于建哈弗曼树中选择权值最小的结点的函数

printf("请输入要压缩的文件名:");

scanf("%s",infile);

ifp=fopen(infile,"rb");

if(ifp==NULL)

{

printf("文件名输入错误,文件不存在!\n");

return;

}

printf("请输入目标文件名:");

scanf("%s",outfile);

ofp=fopen(outfile,"wb");

if(ofp==NULL)

{

printf("文件名输入错误,文件不存在!\n");

return;

}

start1=clock() ;//开始计时1

//统计文件中字符的种类以及各类字符的个数

//先用字符的ASCII码值代替结点下标

FileLength=0;

while(!feof(ifp))

{

fread(&c,1,1,ifp);

hfmnode[c].weight++;

FileLength++;

}

FileLength--; //文件中最后一个字符的个数会多统计一次,所以要减一

hfmnode[c].weight--;

//再将ASCII转换为字符存入到结点的ch成员里,同时给双亲、孩子赋初值-1

n=0;

for(i=0;i<256;i++)

if(hfmnode[i].weight!=0)

{

hfmnode[i].ch=(unsigned

c语言文件压缩与解压缩实验报告,哈弗曼树的文件压缩和解压实验报告(C语言).doc...相关推荐

  1. 哈夫曼树实现文件的压缩与解压缩

    利用哈夫曼树实现文件的压缩与解压缩 压缩: 1.统计出文件中相同字符出现的次数 2.获取哈夫曼编码 次数作为权值构建哈夫曼树 3.重新编码,写回压缩文件 保存头文件: 源文件后缀 编码信息的行数 每个 ...

  2. 20172305 2018-2019-1 蓝墨云班课实验--哈夫曼树的编码

    20172305 2018-2019-1 蓝墨云班课实验--哈夫曼树的编码 实验要求 设有字符集:S={a,b,c,d,e,f,g,h,i,j,k,l,m,n.o.p.q,r,s,t,u,v,w,x, ...

  3. 文件高阶操作复制查找处理目录树打包文件shutil

    文件高阶操作复制查找处理目录树打包文件shutil 1.概述 shutil模块包含了文件高级操作,比如复制文件.查找文件.处理目录树.打包文件. 2.复制文件 2.1.文件对文件复制copyfile ...

  4. 数据结构c语言版胡学刚答案,哈夫曼树的建立与实现(最终版)最新版

    <哈夫曼树的建立与实现.doc>由会员分享,可免费在线阅读全文,更多与<哈夫曼树的建立与实现(最终版)>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索 ...

  5. 哈夫曼树实现文件压缩

    最近在学了哈夫曼树之后,作为练习,写了一个文件压缩的小项目: 在这里和大家分享一下: 主要实现思路: 利用哈夫曼树的特性对字符进行哈夫曼编码,其中运用到了最小堆:利用最小堆的特性,找出构造哈夫曼树的结 ...

  6. 用赫夫曼树进行文件的压缩

    思路分析 代码实现 package com.atguigu.huffmancode;import com.sun.org.glassfish.external.statistics.CountStat ...

  7. 赫夫曼树建立c语言源程序编译结果详细解释,哈夫曼树的建立与实现最终版(备份存档)...

    <哈夫曼树的建立与实现.doc>由会员分享,可免费在线阅读全文,更多与<哈夫曼树的建立与实现(最终版)>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索 ...

  8. 用赫夫曼树进行文件解压

    思路分析 代码实现 package com.atguigu.huffmancode;import com.sun.org.glassfish.external.statistics.CountStat ...

  9. 20172328--蓝墨云班课实验--哈夫曼树的编码

    哈夫曼编码测试 任务详情 设有字符集:S={a,b,c,d,e,f,g,h,i,j,k,l,m,n.o.p.q,r,s,t,u,v,w,x,y,z}. 给定一个包含26个英文字母的文件,统计每个字符出 ...

最新文章

  1. Jquery 改变样式
  2. C#通用类库--设置开机自运行禁用任务管理器注册表等操作
  3. python 序列解包(解压缩)
  4. 面试官 | Class.forName 和 ClassLoader 有什么区别?
  5. java(线程特性,Volatile作用,java内存模型)
  6. c语言n次方怎么输入_C语言基本数据类型的思维导图
  7. 如何对Internet Marketing网络市场营销进行数据报表分析
  8. 车载双目相机,老兵的二次出征
  9. 云优CMS发布接口模块—免登录通用版
  10. 云安全七大核心要素解析
  11. PostgreSQL 基于heap表引擎的事务 实现原理
  12. 科大讯飞,百度,思必驰,云知声四款识别引擎降噪算法性能对比
  13. mybatis 源码系列(四) 数据库驱动Driver加载方式
  14. 浏览器主页进来是hao123
  15. PAT 1110 区块反转 (25 分) c语言
  16. JSON--就是键值对
  17. 教师资格证查询找不到服务器怎么办,教师资格证成绩查询页面打不开怎么办?...
  18. thinkphp 页面静态化
  19. 性能提升10倍以上:阿里达摩院成功研发新型存算一体芯片
  20. HTTP请求方法:GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE 说明

热门文章

  1. Django REST framework 认证、权限和频率组件
  2. 如何获取option的下标和值_数智化时代下,如何获取企业增长密码?
  3. 【框架学习分享】HttpRunner
  4. 【机器学习】opencv-视频中的人脸检测
  5. namespace! 报错
  6. 融云通讯服务器,vue使用融云即时通讯,老是报了发送失败,服务器超时
  7. caffe common 程序分析 类中定义类
  8. android代码导入有错误,android新项目导入后进行编译出现cmake错误
  9. Go语言web框架 gin
  10. 【java设计模式】【行为模式Behavioral Pattern】迭代器模式Iterator Pattern