}
else {
[...] = translation for [old]; k = first character of [...];
Output [...]k to CharStream; add [...]k to the StringTable; [old] = [code]; }
[code] }
= Next Code in the CodeStream;
四、测试与分析
4.1
1. 在压缩时没有错误,但解压时总会有一个字符没有解压正确,也不知原因,最后改用VC++就没事了,但改成用VC++后读文件就有问题了,读文件时会提示文件读写错误,最后没有用到scanf函数输入文件名。
2. 在解压时怎么样才能知道当前的字符串是已经遇见过的?如果是遇见过的,它的标号是多少呢?显而易见,必须把已经遇见过并且标了好的字符串以某种方式储存起来,每次读入一个新的字符,就要去查找储存起来的数据。
五、测试结果:
1、 主界面:
2、解压界面:
压缩界面:
六、用户使用手册
1、程序的运行环境是XP SP3系统,内存2GB。
2、编译环境是VC++6.0,通过创建工程后编译、连接即可运行
3、程序运行中的操作是通过提示菜单的方式运行,输入相应的操作数即可进行相应目录进行操作
4、登录后可以按相关提示进行文件的压缩与解压。
七、总结与体会
1. 通过这次的课程设计,我对程序的模块化设计有更深一层的识认,
原始数据中,只包括4个字符(Character),A,B,C,D,四个字符可以用一个2bit的数表示,0-A,1-B,2-C,3-D,从最直观的角度看,原始字符串存在重复字符:ABCCAABCDDAACCDB,用4代表AB,5代表CC,上面的字符串可以替代表示为:45A4CDDAA5DB,这样是不是就比原数据短了一些呢!
它采用了一种先进的串表压缩不,将每个第一次出现的串放在一个串表中,用一个数字来表示串,压缩文件只存贮数字,则不存贮串,从而使图象文件的压缩效率得到较大的提高。奇妙的是,不管是在压缩还是在解压缩的过程中都能正确的建立这个串表,压缩或解压缩完成后,这个串表又被丢弃。
LZW码能有效利用字符出现频率冗余度进行压缩,且字典是自适应生成的,但通常不能有效地利用位置冗余度。除了用于图像数据处理以外,LZW压缩技术还被用于文本程序等数据压缩领域。对于数据流中连续重复出现的字节和字串,LZW压缩技术具有很高的压缩比。对于任意宽度和像素位长度的图像,都具有稳定的压缩过程。压缩和解压缩速度较快。
八、参考文献
《数据结构(C语言版)》电子工业出版社 肖宏启 清华大学,数据结构(C语言版) 黄国瑜、叶乃菁编著