- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验三LZW编码
实验三 LZW编码
一、实验目的
1、加深对LZW编码的理解;
2、掌握LZW编码的程序设计。
二、原理与说明
LZW编码的步骤:
串表 a 1 aab 7 b 2 bc 8 c 3 cb 9 aa 4 baa 10 ab 5 aaba 11 ba 6 abb 12
a a b aa b c ba aab ab bc
1 1 2 4 2 3 6 7 5 8
三、
计算机
程序如下:#includestdio.h
#includeconio.h
#includemalloc.h
#includestring.h
#includeprocess.h
#define BIRS 12
#define HASHING_SHIFT BITS-8
#define MAX_VALUE(1BITS)-1
#define MAX_CODE MAX_VALUE-1
#if BITS==14
#define TABLE_SIZE 18041
#endif
#if BITS==13
#define TABLE_SIZE 9029
#endif
#if BITS=12
#define TABLE_SIZE 5021
int *code_value;
unsigned int *prefix_code;
unsigned char *append_character;
unsigned char decode_stack[4000];
char ok;
find match(int hash_perfix,unsigned int hash_character)
{
int index;
int offset;
index=(hash_characterHASHING_SHIFT)^hash_prefix;
if(index==0)
offset=1;
else
offset=TABLE_SIZE-index;
while(1)
{
if(code_value[index]==-1)
return(index);
if(prefix_code[index]==hash_prefixappend_character[index]==hash_character)
return(index);
index-=offset;
if(index0)
index+=TABLE_SIZE;
}
}
input_code(FILE*input)
{
unsigned int return_value;
static int input_bit_count=0;
static unsigned long input_bit_buffer=0L;
while(input_bit_count=24)
{
input_bit_buffer|=(unsigned long)getc(input)(24-input_bit_count);
input_bit_count+=8;
}
return_value=input_bit_buffer(32-BITS);
input_bit_buffer=BITS;
input_bit_count-=BITS;
return(return_value);
}
void output_code(FILE*output,unsigned int code)
{
static int output_bit_count=0;
static unsigned long output_bit_buffer=0L;
output_bit_buffer|=(unsigned long)code(32-BITS-output_bit_count);
output_bit_count+=BITS;
while(output_bit_count=8)
{
putc(output_bit_buffer24,output);
output_bit_buffer=8;
output_bit_count-=8;
}
}
void compress(FILE *input,FILE *output)
{
unsigned int next_code;
unsigned int character;
unsigned int string_code;
unsigned int index;
int i;
next_code=256;
for(i=0;iTABLE_SIZE;i++)
code_value[i]=-1;
i=0;
printf(\n\nCompressing..
文档评论(0)