LZW算法的实现.doc
文本预览下载声明
多媒体技术与应用课外作业
班级: 07计科一班
姓名: 陈东棋
学号: 2007117039
实验名称:LZW算法的编程实现
实验内容:寻找或编写程序来实现LZW算法
实验步骤:C语言程序如下所示
程序由五个模块组成
lzw.h 定义了一些基本的数据结构,常量,还有变量的初始化等
#ifndef __LZW_H__
#define __LZW_H__
//------------------------------------------------------------------------------
#include stdio.h
#include stdlib.h
#include windows.h
#include memory.h
//------------------------------------------------------------------------------
#define LZW_BASE 0x102// The code base
#define CODE_LEN 12 // Max code length
#define TABLE_LEN 4099 // It must be prime number and bigger than 2^CODE_LEN=4096.
// Such as 5051 is also ok.
#define BUFFERSIZE 1024
//------------------------------------------------------------------------------
typedef struct
{
HANDLE h_sour; // Source file handle.
HANDLE h_dest; // Destination file handle.
HANDLE h_suffix; // Suffix table handle.
HANDLE h_prefix; // Prefix table handle.
HANDLE h_code; // Code table handle.
LPWORD lp_prefix; // Prefix table head pointer.
LPBYTE lp_suffix; // Suffix table head pointer.
LPWORD lp_code; // Code table head pointer.
WORD code;
WORD prefix;
BYTE suffix;
BYTE cur_code_len; // Current code length.[ used in Dynamic-Code-Length mode ]
}LZW_DATA,*PLZW_DATA;
typedef struct
{
WORD top;
WORD index;
LPBYTE lp_buffer;
HANDLE h_buffer;
BYTE by_left;
DWORD dw_buffer;
BOOL end_flag;
}BUFFER_DATA,*PBUFFER_DATA;
typedef struct //Stack used in decode
{
WORD index;
HANDLE h_stack;
LPBYTE lp_stack;
}STACK_DATA,*PSTACK_DATA;
//------------------------------------------------------------------------------
VOID stack_create( PSTACK_DATA stack )
{
stack-h_stack = GlobalAlloc( GHND , TABLE_LEN*sizeof(BYTE) );
stack-lp_stack = GlobalLock( stack-h_stack );
stack-index = 0;
}
显示全部