资源简介
数据结构课程设计用哈夫曼编码实现文件压缩:
一、实验题目:
用哈夫曼编码实现文件压缩
二、实验目的:
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
- 上一篇:vc++ 彩色图与灰度图的转换
- 下一篇:DEC6713 GPIO例程
相关资源
- 数据结构 图的遍历源代码
- 数据结构实验源代码集
- 实验报告:数据结构长整数四则运算
- 数据结构教程李春葆第五版书中例题
- 吕鑫vc6c++数据结构视频源码
- 数据结构教程李春葆第五版课后答案
- 李春葆课后习题答案(数据结构教材
- 数据结构1800题 题+答案(全)
- 数据结构(C语言版)ppt课件,清华,
- c++常用游戏算法及数据结构设计
- 数据结构超全面复习导图
- 《Data Structures and Algorithm Analysis in C
- 数据结构C语言版教学笔记严蔚敏
- 数据结构C语言版期末考试试题(有答
- 多功能计算器实现C++代码以及代码详
- C语言数据结构银行客户排队
- C语言实现栈操作
- 简易学生管理系统源码 数据结构 大作
- 数据结构与C语言综合习题集
- 数据结构实验——赫夫曼树相关
- C语言进阶源码---基于graphics实现图书
- 数据结构——C++语言描述 陈慧南
- 广东工业大学数据结构课程设计航空
- 数据结构课程设计扑克牌排序
- 数据结构各种算法实现(C++模板),
- (严版C语言版数据结构源码.rar
- 数据结构算法与应用--C++语言描述 书
- 数据结构大作业 停车场管理 C语言
- 北航991数据结构与C语言程序设计历年
- 用c写的航空订票系统 航班信息改变
评论
共有 条评论