《数据结构》课程设计.pdf
上传人:sy****28 上传时间:2024-09-12 格式:PDF 页数:2 大小:62KB 金币:12 举报 版权申诉
预览加载中,请您耐心等待几秒...

《数据结构》课程设计.pdf

《数据结构》课程设计.pdf

预览

在线预览结束,喜欢就下载吧,查找使用更方便

12 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

《数据结构》课程设计凌璐一.题目:压缩软件二.算法思想描述:1.算法概述:首先输入需要压缩的文件名,对该文件中的各个字符出现的频度进行统计,然后进行Huffman编码,再读入源文件,将源文件翻译成Huffman编码文件,输出到文件2.txt,最后读入2.txt文件,将Huffman编码文件翻译成文本文件,输出到3.txt。总体思路如图1所示。2.算法具体分析(1)入需要压缩的文件名(例如:e:\\1\\1.cpp,转义字符\\表示\)(2)对该文件中的各个字符进行统计while(!feof(fp)){fscanf(fp,"%c",&c);a[c]++;}数组里存放的是该字符出现的次数,数组的下标即该字符对应的ASCII值判断a[i]是否为0,对不为0的进行Huffman编码,数组值即权值(3)根据Huffman算法,建立Huffman树。(4)给叶子节点进行编码,先用一个临时的数组来存放编码,然后把该字符的编码存入一个二维数组,直至所有的叶子结点编码完成,编码存放在二维数组hd[128][100]内。(5)读入源文件的内容,将字符所对应的编码(调用数组hd[128][100])输出到2.txt文件里。(6)读入2.txt文件,若读入'0'则在Huffman树的左子树上找,否则在右子树上找,直到找到叶子结点(Huffman树存放在自定义的存储结构closedge[500]内),输出叶子结点的字符到文件3.txt,直至翻译完2.txt所有内容。(7)计算压缩比:Huffman编码文件字符数/源文件的字符数。三.程序结构四.实验结果与分析上述程序在VisualC++6.0环境下加以实现,经过多次的测试,程序运行正确。例如:输入文件e:\1\1.cpp,运行结果如图2,图中显示源文件的字符数和压缩后字符数,以及压缩比。成功将源文件e:\1\1.cpp压缩到文件2.txt(图3)里,再还原到文件3.txt。通过比较3.txt与源文件,结果一样!图2图3五.体会通过这次课程设计,我有很深的体会,具体如下:1.Huffman树的建立,编码,译码有了更深层次的理解。2.文件的打开,关闭,读入,输出语句比较熟悉了。3.统计文件中字符的个数时,根据所要统计的字符的特征(ASCII值从0到127),可以定义一个数组a[128],数组的下标即该字符对应的ASCII值,扫描源文件,扫到哪个字符对应的数组值+1,即a[c]++(c为字符),最终数组里存放的是对应字符出现的次数,这样不但语句简洁,而且十分明了。4.程序应用更广泛,比如压缩文件,只要输入文件的路径和名称,就可以对其进行压缩,而不是仅局限于某个特定文件。5.输入文件名的时候,路径中的\,应该写成\\(转义字符\\表示\),否则系统将默认\和它后面的字符组成转义字符,这样就错了。6.对文件的压缩也有了初步的了解,2.txt是Huffman编码文件,如果把0、1看成字符,那么2.txt文件的字符数增加了,如果把它看成位(bit),若一个字符对应的编码小于8位这样文件就压缩了。7.从用户角度出发来编写程序,使结果尽量简洁明了。Haffman编码压缩文件1