课程设计报告
些二进制数从哈夫曼树的根结点(下标为 510)出发,0 走左子,1 走右子,
找到叶子结点,把该叶子结点的下标写入新文件,最后处理有效位数不满 8
位的字节。
以上是主要的模块及其基本功能,基本都单独设为函数,通过参数来传递信息
二、详细设计
数据结构设计
由于此压缩程序是利用哈夫曼编码进行工作的,用到的最主要
的数据结构就是哈夫曼树了,物理结构采用静态三叉链来表示,以
每个文件中字节的出现次数为权值创建此哈夫曼树,对每个叶子结
点进行编码,一般对于权值公布不太均匀的文件编码后的长度要短
一些,故可以起到压缩的目的。解压则是从根根据文件二进制代码
进行访叶,对应的叶子就是原文件了。
此外还用多次用到了栈和队列,例如解压读文件时需要将十进
制数转化为二进制数,用到了栈,十进制数模除 2 所得的余数存到
栈中,出栈后顺序就是所要的二进制代码的顺序。
队列也是用在了解压的过程中,由于有最后有效位数不是 8 位
的情况,我不能预先知道什么时候读到最后一位,所以我用了一个
队列把每次读到的字节先放到队列中去,当其中的数据大于等于 2
- 1
- 2
- 3
- 4
- 5
前往页