- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
huffman 算法应用
huffman 算法应用
huffman 算法应用2007年06月28日 14:25/*****************************************************
* 功能:实现对简单的文本文件压缩
* 原理:huffman编码原理,求得最优树
* 作者:小花朵
* 日期:2006-4-9
* 学院:河南大学计算机与信息工程学院
* Email:zhuweidong8@
******************************************************/
#includeiostream
#includestring
//#includefstream
//#includestdlib.h
//#includeconio.h
using namespace std;
struct HC_head
{
unsigned char ch;
unsigned int frequency;
};
typedef struct
{
unsigned int weight;
unsigned int parent,lchild,rchild;
}HTNode,* HuffmanTree;
#define uchar unsigned char
typedef char** HuffmanCode;//动态分配数组存储哈夫曼代码表
unsigned long file_size;
int num_of_char;//统计不同字符的个数
long frequency_count[257];//频率统计
char *DC;//解码后的字符串
string s=;//编码后的字符串
uchar *data;//压缩数据块
HC_head *head;//头信息指针
FILE *ifile, *ofile, *pfile, *qfile;
HuffmanTree HT;
HuffmanCode HC;
char *array1,*array2;
//////////////////////////////////////////////////////////////
//**************位操作******************************
char * bittest(uchar num,uchar bit) /*测试某一位*/
{
if(numbit0x01==1) return 1;
else return 0;
}
void bitset(uchar num,uchar bit) /*设置某一位*/
{
uchar bit_value[]={1,2,4,8,16,32,64,128};
num=num|bit_value[bit];
}
//**************清空信息***********************
void clear_frequency_count()
{
for(int i=0;i257;i++) frequency_count[i]=0;
}
//*************求编码后的字符串*****************
void get_data_size()
{
unsigned long loop;
uchar t;
fseek (ifile, 0L, 0);//SEEK_SET=0 文件开始;SEEK_END=2 文件末尾;SEEK_CUR=1 文件当前位置
for (loop = 0; loop file_size; loop++)
{
t=(uchar)getc(ifile); s+=HC[t+1];
}
//coutsendl;//编码后字符串
}
//*************压缩用频率统计*******************
void get_frequency_count_comp ()
{
register unsigned long loop;
fseek (ifile, 0L, 0);//SEEK_SET=0 文件开始;SEEK_END=2 文件末尾;SEEK_CUR=1 文件当前位置
for (loop = 0; loop file_size; loop++)
frequency_count[getc(ifile)]++;
}
//************解压缩用频率统计******************
void get_frequency_count_decomp()
{
for(long loop = 0; loop num_of_char;lo
文档评论(0)