资源简介

数据结构课程设计用哈夫曼编码实现文件压缩: 一、实验题目: 用哈夫曼编码实现文件压缩 二、实验目的: 1、了解文件的概念。 2、掌握线性链表的插入、删除等算法。 3、掌握Huffman树的概念及构造方法。 4、掌握二叉树的存储结构及遍历算法。 5、利用Huffman树及Huffman编码,掌握实现文件压缩的一般原理。 三、实验设备与环境: 微型计算机、Windows 系列操作系统 、Visual C++6.0软件 四、实验内容: 根据ASCII码文件中各ASCII字符出现的频率情况创建Haffman树,再将各字符对应的哈夫曼编码写入文件中,实现文件压缩。 五、概要设计: 1、数据结构类型定义 /*****Huffman结构定义**********/ typedef struct node { long w;//w为权值 short p,l,r; //p为parent,l为左孩子,r为右孩子 }htnode,*htnp;//动态分配数组存储哈夫曼树 /*****Huffman编码表结构定义*****/ typedef struct huffman_code { unsigned char len;//长度 unsigned char *codestr; }hufcode; typedef char **huffmancode;//动态分配数组存储哈夫曼编码表 2、本程序的构成,共有14个函数,一个菜单函数 int initial_files(char *source_filename,FILE **inp,char *obj_filename,FILE **outp); //1.初始化文件名 char *create_filename(char *source_filename,char* obj_filename); //2.创建文件名 int compress(char *source_filename,char *obj_filename); //3.压缩文件

资源截图

代码片段和文件信息

#include  //主要包括常用的输入/输出函数
#include  //主要包括常用的字符串操作函数
#include  //字符串转换函数、内存分配函数、过程控制函数

//以下两个库函数可使用之一,完成库函数的调用
#include //作用是将键盘输入的在屏幕上 打印 出来等
//#include //字符的输入、输出函数,字符操作函数、颜色设置函数

/*****Huffman结构定义**********/
typedef struct node 

    long    w;//w为权值
    short   plr; //p为parent,l为左孩子,r为右孩子
}htnode*htnp;//动态分配数组存储哈夫曼树

/*****Huffman编码表结构定义*****/
typedef struct huffman_code 

    unsigned char len;//长度
    unsigned char  *codestr; 
}hufcode;

typedef char **huffmancode;//动态分配数组存储哈夫曼编码表


/*********函数声明*********/
int initial_files(char *source_filenameFILE **inpchar *obj_filenameFILE **outp);
//1.初始化文件名
char *create_filename(char *source_filenamechar* obj_filename);
//2.创建文件名
int compress(char *source_filenamechar *obj_filename);
//3.压缩文件
long frequency_data(FILE *inlong fre[]);
//4.频率数据
int search_set(htnp htint nint *s1 int *s2);
//5.选取结点权值最小的树
int create_hftree(long w[]int nhtnode ht[]);
//6.创建哈夫曼树
int encode_hftree(htnp htpint nhufcode hc[]);
//7.编码哈夫曼树
unsigned char chars_to_bits(const unsigned char chars[8]);
//8.把字符串用二进制数字表示:运用位运算的知识
int write_compress_file(FILE *inFILE *outhtnp hthufcode hc[]char* source_filenamelong source_filesize);
//9.写入压缩文件
int decompress(char *source_filenamechar *obj_filename);
//10.解压缩
void get_mini_huffmantree(FILE* inshort mini_ht[][2]);
//11.解压构造微哈夫曼树
int write_decompress_file(FILE *inFILE* outshort mini_ht[][2]long bits_poslong obj_filesize);
//12.写入解压缩
int d_initial_files(char *source_filenameFILE **inpchar *obj_filenameFILE **outp);
//13.重新变成原始文件
/*菜单函数*/
void main()
{
int s;
char filename[10];
//system(“color 3F“);//设置背景颜色 1.深蓝色 2.墨绿色 3.天蓝色4.棕红色 5.紫色6.褐色7.灰色
    printf(“        ****************************************************\n“);
printf(“                    *           菜单:            *\n“);
printf(“                    *   1.------压缩--------      *\n“);
printf(“                    *   2.------解压缩------      *\n“);
printf(“                    *   0.------退出--------      *\n“);
printf(“        ****************************************************\n“);
scanf(“%d“&s);
while(s!=0)
{
getchar();
switch(s)
{
case 1:
puts(“请输入待压缩文件路径:“);
gets(filename);
compress(filenameNULL);
break;
case 2:
puts(“请输入待解压文件路径:“);
gets(filename);
decompress(filenameNULL);
break;
default : 
printf(“指令错误!请重新输入指令:\n“);
}
puts(“ “);
printf(“        ****************************************************\n“);
printf(“                    *           菜单:              *\n“);
printf(“                    *   1.------压缩--------         *\n“);
printf(“                    *   2.------解压缩------        *\n“);
printf(“                    *   0.------退出--------          *\n“);
printf(“        ****************************************************\n“);
scanf(“%d“&s);
}
}

                 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件      496042  2016-04-03 23:56  34.doc
     文件       16418  2013-12-20 12:46  huffman34.cpp

评论

共有 条评论