- 0
- 0
- 约5.11千字
- 约 15页
- 2026-02-11 发布于江苏
- 举报
数据结构课程设计报告
压缩软件
一·问题描述
利用哈夫曼编码设计一个压缩软件,能对任何类型的文件进行哈夫曼编码,产生编码后的文件——压缩文件;也能对输入的压缩文件进行译码,生成压缩前的文件——解压文件。
二·基本要求
要求编码和译码的效率尽可能地高。
三·工具/准备工作
已学内容:哈夫曼树,哈夫曼树构造算法,哈夫曼编码,Huffman压缩算法。
需要的硬件设施与开发软件:一台计算机,并安装了VisualC++.
四·分析与实现
Huffman树中,叶子结点包含字符以及对应的字符频度(权值)
structHTNode{ //压缩用Huffman树结点
unsignedlongweight; //字符频度(权值)
unsignedintparent,lchild,rchild;
};
使用哈夫曼编码可以对文件进行压缩,由于字符的哈夫曼编码以比特为单位,而当将哈夫曼编码以压缩文件进行存储时,压缩文件最少以字节为单位进行存储,因此需要定义字节缓冲器,以便自动将比特转换为字节,定义如下:
structBuffer{ //字节缓冲压缩用Huffman树
charch; //字节
unsignedintbits; //实际比特数
};
定义哈夫曼树的抽象基类模板,实现建树,压缩,解压等功能
classHuffmanTree{ //Huffman树
public:
voidCode(); //编码
voidUnCode(); //译码
private:
HTNodeHT[m+1]; //树结点表(HT[1]到HT[m])
charLeaf[n+1]; //叶结点对应字符(leaf[1]到leaf[n])
char*HuffmanCode[n+1]; //叶结点对应编码(*HuffmanCode[1]到*HuffmanCode[n])
unsignedintcount; //频度大于零的字符数
unsignedintchar_index[n]; //字符对应在树结点表的下标(char_index[0]到char_index[n-1])
unsignedlongsize; //被压缩文件长度
FILE*infp,*outfp; //输入/出文件
Bufferbuf; //字符缓冲
voidStat(); //统计字符出现频度并过滤掉频度为零的字符
//在HT[0]~HT[k]中选择parent为-1,树值最小的两个结点s1,s2
voidSelect(unsignedintk,unsignedints1,unsignedints2);
voidWrite(unsignedintbit); //向outfp中写入一个比特
voidWrite(unsignedintnum,unsignedintk);//向outfp中写入k个比特
voidWriteToOutfp(); //强行写入outfp
voidRead(unsignedintbit); //从infp中读出一个比特
voidRead(unsignedintnum,unsignedintk);//从infp中读出k个比特
intNToBits(unsignedintnum); //0~num之间的整数用二进位表示所需的最少位数
voidCreateFromCodeFile(); //由编码文件中存储的树结构建立Huffman树
//由被压缩文件建立Huffman树,将树结构存入编码文件的文件头部中,并求每个字符的Huffman编码
voidCreateFromSourceFile();
};
辅助函数Write用于一次向字符缓存中写入一比特,当缓冲器中的比特数为8(也就是一个字节)时,将缓存中的字符写入目标文件中,实现如下:
voidHuffmanTree::Write(unsignedintbit) //向outfp中写入一个比特
{
buf.bits++;
buf.ch=(buf.ch1)+bit;
if(buf.bits==8){//缓冲区已满,写入out
您可能关注的文档
- 数据结构的心得体会.docx
- 数据结构课程设计停车场仿真.docx
- 数据结构上机实验报告.docx
- 数据结构实验报告.docx
- 数据结构心得体会.docx
- 数列求和教学设计.doc
- 数列求和问题教案.doc
- 数列求和相关问题.doc
- 数列求和与最值(高考一轮复习).doc
- 数列求通项公式的常见题型与解题方法.doc
- 2026年及未来5年中国拉毛围巾市场数据分析及竞争策略研究报告.docx
- 2026年及未来5年中国锚杆拉力计市场数据分析及竞争策略研究报告.docx
- 2025年事业单位工勤技能-浙江-浙江军工电子设备制造工五级(初级工)历年参考题典型考点含答案解析.docx
- 2025年事业单位工勤技能-新疆-新疆放射技术员五级(初级工)历年参考题典型考点含答案解析.docx
- 2025年事业单位工勤技能-宁夏-宁夏计算机操作员四级(中级工)历年参考题典型考点含答案解析.docx
- 2025年事业单位工勤技能-甘肃-甘肃地图绘制员三级(高级工)历年参考题典型考点含答案解析.docx
- 2026年及未来5年中国五金弹簧市场数据分析及竞争策略研究报告.docx
- 2026年及未来5年中国电话簿纸市场数据分析及竞争策略研究报告.docx
- 2026年及未来5年中国上下悬窗市场数据分析及竞争策略研究报告.docx
- 2025年及未来5年中国液晶一体电脑/电视市场数据分析及竞争策略研究报告.docx
原创力文档

文档评论(0)