大二课程设计日志:文件压缩软件(二)

霍夫曼压缩的大体思想:



以 8字节为一个单位,读取源文件的 2进制码,并统计源文件 2进制码( 0~ 255)的出现次数,用于生成霍夫曼编码。
霍夫曼编码的生成过程: 找出两个出现频率最小的元素(在考虑用 qsort()),标记为叶节点,将其频率相加,创建一个新的父节点将父节点存储在结构数组中,创立指针或链接。将父节点加入选择范围中。循环该过程,直到所有元素都已经遍历。至此霍夫曼树已建立。
问题是, 如何从霍夫曼树获得编码(”<<”or”>>” )。。这个再说,具体问题明天解决。
当获得编码之后,我们就要根据编码表,将读入的源文件 01码转换为霍夫曼码,并写入新的文件。这其中, 如何由字符串的01 串转成2 进制的01 ,这也是个问题。


项目的组织形式:

var.h --写入 var文件需要的头结构和定义函数
var.c --实现 var.h中的函数
huf.h --定义霍夫曼压缩解压所需要的结构和函数
huf.c --实现霍夫曼压缩和解压
main.c --主函数


如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.ctestfun.c]
1. 多个文件一起编译
用法:#gcc testfun.c test.c -o test
作用:将testfun.ctest.c分别编译后链接成test可执行文件。
2. 分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
#gcc -c testfun.c //testfun.c编译成testfun.o
#gcc -c test.c //test.c编译成test.o
#gcc -o testfun.o test.o -o test //testfun.otest.o链接成test
以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。 


你可能感兴趣的:(压缩,日志,文件,软件,课程)