数据结构与算法分析综合实验:用哈夫曼编码实现文件压缩

用哈夫曼编码实现文件压缩实验报告

一、实验目的

	1、了解文件的概念。
	2、掌握线性链表的插入、删除等算法。
	3、掌握Huffman树的概念及构造方法。
	4、掌握二叉树的存储结构及遍历算法。
	5、利用Huffman树及Huffman编码,掌握实现文件压缩的一般原理。

二、实验环境

	微型计算机、Windows系列操作系统 、Visual C++6.0软件等。

三、实验内容

根据ASCII码文件中各ASCII字符出现的频率情况创建Huffman树,再将各字符对应的哈夫曼编码写入文件中,实现文件压缩。

四、实验结果及分析

1.概要设计
(1)构造哈夫曼树的哈夫曼算法
	构造哈夫曼树步骤:
	a.根据给定的n个权值{w1,w2……wn},构造n棵树只有根结点的二叉树,起权值为wj。
	b.在森林中选取两棵根结点权值最小和次小的树作为左右子树,构造一棵新的二叉树,置新的二叉树根结点权值为其左右子树根结点权值之和。
	c.在森林中删除这两棵树,同时将新得到的二叉树加入森林中。
	d.重复上述两步,直到只含一棵树为止,这棵树即为哈夫曼树。

算法结构如图:

(2)哈夫曼编码:数据通信用的二进制编码
		思想:根据字符出现的频率编码,使电文总长最短
		编码:根据字符出现的频率构造哈夫曼树,然后将树中结点引向其左孩子的分支标“0”,引向其右孩子的分支标“1”;每个字符的编码即为从根到每个叶子的路径上得到的0、1序列。
(3)文本编码
读取存放在文本中的字母,一对一的进行编译,将对应的编码存放在另一个文本中。
2.详细设计

(1)压缩过程图解
在这里插入图片描述(2)详细代码

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <conio.h> 

/*哈夫曼树结构定义*/
struct head 
{ 
	unsigned char b;            /*定义一个字符*/
    long count;                 /*频率数据*/ 
    long parent,lch,rch;        /*创建哈夫曼树*/ 
    char bits[256];             /*哈夫曼结点*/ 
}header[512],tmp; 


/*压缩文件*/
void yasuo()                                 
{ 
    char filename[255],outputfile[255],buf[512]; 
    unsigned char c; 
	char wenjia
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值