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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android基础知识之一

1:Android系统架构&#xff08;重点&#xff09; 分层的架构 JNI java native interface   1.application :应用层 &#xff1b; java   2.application framework :应用框架层 &#xff0c; java&#xff2a;&#xff2e;&#xff29;   3.libraries 和 dalvik &#xf…

HT68F30控制5150 IIC控制总线

1、关于应答信号的一点知识 数据传输与应答信号ACK 发送到SDA线上的数据必须是8位的。每次传输可以发送的数据不受限制。每个字节后必须在时钟的第9个脉冲期间释放数据总线&#xff08;SDA为高&#xff09;&#xff0c; 由接收器发送一个ACK(把数据总线的电平拉低)来表示数据成…

c语言指针改良,重新认识C语言指针(上)(示例代码)

? 独创性并不是首次观察某种新事物&#xff0c;而是把旧的、很早就是已知的&#xff0c;或者是人人都视而不见的事物当新事物观察&#xff0c;这才证明是有真正的独创头脑 —尼采本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues。https://github.com/midou-tech/article…

centos安装Python2.7

1. 查看本机系统及python版本 # cat /etc/redhat-release CentOS release 6.7 (Final) 查看CentOS release 6.7 (Final)自带的python版本 # python -VPython 2.6.6 注意&#xff0c; 我们不要破坏系统的Python环境&#xff0c; 因为几个关键的实用应用程序依赖于系统默认的Pyth…

HT68F30控制GPG96244QS1 TFT液晶屏

资料上显示是SPI总线控制、在SPENB由高变底的时候起动传输、由低到高的时候停止转输、并且传送的时候先传高位的数据、现在没有效果出来&#xff08;正在找问题&#xff09; 没有效果的意思是&#xff1a; 1、LCD屏没有图像、只有背光在亮 2、还没有找到一个寄存器或者一种方…

type pdf c语言课程设计,c语言课程设计-.pdf

西昌学院&#xff23;语言课程设计报告题 目_学生成绩管理系统______学生编号_ ___________学生姓名_ _____________班 级指导教师__ _ __ _____&#xff12;&#xff10;11 年 12 月一. 课程设计任务内容设计一个学生成绩管理系统。系统功能&#xff1a;1)具备对学生基础数据的…

linux —— shell 编程(文本处理)

导读 本文为博文 linux —— shell 编程&#xff08;整体框架与基础笔记&#xff09;的第4小点的拓展。&#xff08;本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行&#xff09; 目录基本文本处理流编辑器sedawk模式扫描与处理语言1、基本文本处理sort :用于排序&#xff0c;…

IIC驱动5150遇到麻烦

搞了一天还是没有搞出来、几个问题1、不加镜头、可以检测到应答信号&#xff08;这个真的是无法解决的大BUG啊&#xff09;2、反之&#xff0c;加上镜头、检测不到应答信号&#xff08;自己猜想是不是加上镜头的时候造成电流或者电压变大或者变小了&#xff09;能不能检测到应答…

ub c语言,操作系统之LRU算法 C语言链表实现

LRU是Least Recently Used的缩写&#xff0c;即最近最少使用&#xff0c;是一种常用的页面置换算法&#xff0c;选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段&#xff0c;用来记录一个页面自上次被访问以来所经历的时间 t&#xff0c;当须淘汰一个页面时…

四种常见的 POST 提交数据方式

四种常见的 POST 提交数据方式 文章目录 application/x-www-form-urlencodedmultipart/form-dataapplication/jsontext/xmlHTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据&#xff0…

成功驱动5150用HT68F30

用了自己写的起动总线和停止总线&#xff0c;终于可以成功 // PROGRAM : 4-17.c 2011.0521 // FUNCTION : I2C Master/Slave Mode Demo Program By Steven // Note : Configuration Option Setting-- // SIM Function Enable //void I2C_START(void); /…

VMware 虚拟机 Ubuntu 系统执行 ifconfig 命令 eth0没有IP地址(intet addr、Bcast、Mask)

可能的原因是&#xff0c;你安装了也安装了其他的虚拟机软件&#xff0c;比如&#xff1a;VirtualBox。我们打开 控制面板 > 网络和共享中心 > 更改适配器设置 &#xff0c; 你就可以打开控制面板/网络和Internet/网络连接界面&#xff1a; 直接禁用相应的网络即可&#…

sublime text3c语言编译运行,c – Sublime text 3 – 编译程序并在终端中运行

我正在使用Ubuntu 12.04,我想知道,是否有可能从终端自动运行c程序&#xff1f;当你不得不在构建控制台中使用它时,它真的很糟糕,因为有时候我会意外地创建无限循环,并且必须重新启动sublime文本再次工作.我正在使用Sublime文本3.解决方法:Sublime Text 3包含两个您可能感兴趣的…

5150晶振不起振

1、这是一个比较让我费解的问题、今天从相机输入了PAL信号、发现根本没有解码出来&#xff0c;然后检查检查&#xff0c;发现晶振不起振 解决中。。。 1、换一个板子&#xff0c;看是不是这个板子出了问题、 2、换一个起振电容 问题解决了、原因是TVP5150的PDN脚应该输入高电…

c语言us16 t,使用C ++将越南语字符编码为USASCII,ISO88591,UTF8,UTF16BE,UTF16LE,UTF16(示例代码)...

我已经编辑了我的帖子。当前&#xff0c;我正在尝试对用户的输入字符串进行编码&#xff0c;然后将其转换为每种编码格式。我可以使用Unicode完美地做到这一点&#xff0c;而且我认为输入String的格式为UTF-8。如果我的inputString是“ Hello”。但是&#xff0c;当我尝试输入“…

linux一些基础知识

linux面试题及答案 一&#xff0e;填空题&#xff1a; 1. 在Linux系统中&#xff0c;以 文件 方式访问设备 。 2. Linux内核引导时&#xff0c;从文件 /etc/fstab 中读取要加载的文件系统。 3. Linux文件系统中每个文件用 i节点来标识。 4. 全部磁盘块由四个部分组成&#xff…

这本轻小说真厉害 2016

傲娇御坂美琴成轻小说女王一姐 轻小说排名公布 到了年底,作为轻小说的粉丝就没有理由不关注“这本轻小说真厉害!”的相关评选吧?腾讯动漫此前曾经报道过《OVERLORD》以及《龙王的工作》获得榜首殊荣的消息。而近日,年度的最佳作品、最佳角色以及最佳插画师等奖项也已经公布,快…

IDEA初次使用Tomcat运行项目(如何添加加载项目到Tomcat)

IDEA中Tomcat设置说明 Tomcat最好使用干净的版本 不同的版本适配不同的JDK 设置Tomcat基本信息 加载项目&#xff08;war和war exploed模式简单说明&#xff09; 配置完项目后警告消失 应用后启动 选择相应的模式即可

回溯算法背包问题迭代c语言,回溯法解决0_1背包问题(迭代和递归)

问题&#xff1a;0/1背包问题例子:weight数组代表物品重量&#xff0c;value数组代表物品价值&#xff0c;M代表背包容量。背包是按单位价值递减的顺序排列的&#xff0c;即value[i]/weight[i]>value[i-1]/weight[i-1].const int weight[Max]{1,11,21,23,33,43,45,55};const…