导航:首页 > 源码编译 > lzw算法c语言

lzw算法c语言

发布时间:2022-08-05 09:47:28

❶ 解读批处理语句

del

/F是强制删除只读文件

/Q是安静模式,删除全局通配符时不要求确认。

cls是清屏

cd是进入

cd..是进入上级目录

ren是重命名文件

arc是DOS下的解压缩工具,至于参数,楼主可以再网络一下。

1985年,一个名为SEA公司开发的名为ARC的压缩软件获得了广泛关注。这是MS-DOS环境下第一个压缩应用软件。

ARC在MS-DOS时代,曾经是占据了统治性的地位。从技术角度来说ARC相当优秀,但它使用了专利的LZW算法,因此要使用这款软件必须付费,是一款标准的商业软件。因此,许多电脑用户根本买不起ARC软件。如果不是盗版商将其收录,恐怕我们很少有人能使用上这款软件。

由于在MS-DOS的时代,软件出售的方式不仅包括了一份EXE可执行文件,还包括它的C语言源代码。一个名为菲利普?卡兹的电脑玩家将ARC的C语言源代码进行复制并用汇编语言重写,制作出了一款名为PKARC的压缩软件。这个程序与ARC完全兼容,而且由于使用汇编使得其速度比ARC更快。软件的使用方式也非常简单,它以非强迫性注册的共享软件形式向他人发放,即使是不注册,一样可以毫无限制地使用下去。真是因此,ARC的市场被PKARC侵吞。ARC的开发公司SEA以侵犯ARC压缩格式编码算法的罪名告上了法庭,使得PKARC不得不被停止发放。

而PKARC的作者菲利普?卡兹决定,使用没有任何版权专利的LZ77算法,通过将LZ77和Huffman编码完美结合,创造出了日后大名鼎鼎的DEFLATE算法了。而采用了该算法,经由菲利普?卡兹本人顷力开发的新压缩软件被命名位PKZIP,而其文件格式扩展名叫作“.zip”。PKZIP可将多个文件压缩到一个文件中,无论压缩比还是压缩速度都全面超过了商ARC。PKZIP被菲利普?卡兹免费发放,使得更多的人知道了ZIP格式的压缩文件。

除了免费发放PKZIP,菲利普?卡兹更是宣布开放ZIP格式,使得任何人都可以自由使用ZIP编码算法而不需要缴纳专利费用。这一举动不仅仅方便了全体电脑用户,更是最终改变了压缩软件领域的发展,树立了MS-DOS时代的压缩标准。这个时代同影响力的压缩软件还有LHA(压缩格式为LZH、LHA)和ARJ(压缩格式为ARJ)。

卡兹一直继续着对PKZIP的开发和维护工作,而进入了Windows时代,使用卡兹创造的压缩算法的软件Winzip的出现,更是令ZIP格式成为Internet的传输标准,ZIP压缩格式也成为压缩文档的事实标准。

进入了Windows时代,ZIP最初保持了无人可及的高度和地位,成为了装机必备软件。但是随着WinRAR、WinACE等后起之秀的出现,WinZIP逐渐走向没落。当然,WinZIP毕竟是老姜,不会就此罢休,在沉寂多年之后又开始继续更新开发新版本。因此,压缩软件市场上出现了群雄逐鹿的战国时代。下面就让我们分别对当前的几款主流压缩软件进行简单的介绍。

❷ 如何用C语言读取tif图片每个点的RGB值并进行判断

这个用matlab比较容易,c的没试过。

❸ C++程序设计大作业要求

C++程序设计从零开始之语句
 http://seasonfive.cn/read.php?tid-234.html
h用C++实现简单的文件I/O操作
G http://seasonfive.cn/read.php?tid-236.html
lzw压缩算法的c语言实现
g http://seasonfive.cn/read.php?tid-237.html
%C/C++中的日期和时间
V http://seasonfive.cn/read.php?tid-238.html
)论C/C++函数间动态内存的传递
# http://seasonfive.cn/read.php?tid-239.html
MC++中的虚函数(virtual function)
Y http://seasonfive.cn/read.php?tid-240.html
链表的C语言实现之单链表的查找运算
[ http://seasonfive.cn/read.php?tid-241.html
L链表的C语言实现之单链表的实现
K http://seasonfive.cn/read.php?tid-242.html
"C++程序设计从零开始之指针
h http://seasonfive.cn/read.php?tid-243.html
NC++箴言:将强制转型减到最少
j http://seasonfive.cn/read.php?tid-244.html

❹ 那C语言学了到底有 什么用啊 ,一般编的 程序有 什么用啊

主要是以后若在软件领域工作的话,就对编软件用相当大的用处。
学c语言到底有什么用?为您诠释!
我学了C,C++,JAVA.还有很多的脚本语言,最后彻底留下的只有c语言,c++的许多机制忘了,JAVA就没有记住几种机制。
面对编程高手(会n种),而且很牛b的那种,我依然以我会c语言自豪,我也因为我会c语言而自信。面对什么什么技术“趋势”的时代,我只精通c语言,发现已经足够了,而且是完全足够了。当我需要学习PHP的时候,我1个星期可以说基本掌握了;当我要学B shell的时候,1个星期也够了;当我要学习JSP的时候....什么?什么是JSP?别说我学过这些垃圾。

我爱用最简单的语言机制构建出你复杂逻辑,你严谨的思维。当你发现这么简单的C语言男够构架出UNIX操作系统和大部分UNIX程序的时候,你就发现你不能轻视C。

有的人说机制少,不安全,不健全......那么安全的语言机制就失去了灵活,失去了轻便。
有的人说功能少,C库少,连界面都不能写.......那么当malloc都由自己写的时候,程序才牢牢掌握在自己手中。真正的程序员是没有界面的,程序员在text mode下能快捷,方便地做你想做的一切事情。

下面介绍一下我学习的方法,觉得特别有用。。
如果是连高数,计算机原理之类的书或是英语没有入门的人,那就不应该学习编程,不可能牛起来。
如果是C语言刚上手,最好选一本国内语言语法,语句讲得细致的书。
如果上手了,或者学习过其他的语言,那么就一定要看一本最经典的C语言书,比如《C语言程序设计》,这本书我后来又看一遍才知道有多好,眼界十分开阔。

认为都学的差不多了,最最最好的联系方法(切身体会!!!),就是自己写程序,写什么呢??两个中你挑一个:md5加密算法的实现 或者是 lzss或lzw压缩算法的实现。这两个程序接近底层又不算十分大,又有很多的数据结构和算法。资料就要自己去找了,网上有讲算法的,你来具体实现,能自己设计算法并能够在unix机器上实现那更好。
搞过这个你就能体会到自己终于入门了,因为你到时候就会发现又很多的内容还等着你去学.....并且你可以拿着你的程序炫耀了,事实证明能把这个程序彻底些出来并且些的很好的(bug少),已经有功底了,你可以把程序发布到sourceforge.net等开源社区上,招人开启你自己的工程。

当然有了功底,剩下的路你自己就应该知道怎么走了,有一条向linux工程师的方向,就是学习linux,如果你c语言足够好,可以直接学习内核,试着编写,编译内核;也可以弄弄上层的东西,shell,awk,iptable之类的.....当然经典的书《unix高级编程》是讲unix下的gcc程序开发的

还有网络工程师的路,那就要学协议,有巨他妈经典的3卷的书:《TCP/IP详解》一,二,三。只看一也可以。然后看一看《unix网络编程》,那就足够了.....

如果想向软件工程师发展,那更不成问题。你再学什么语言,什么JAVA,C++,JSP....那是哇哇的简单,但是注意,一定要看最经典的书,你才能成为高手!!

还有一条我最向往的路,就是成为一个hacker,就是黑客,做这个你必须有一定的经济收入和空余的时间才可以...。宗旨是为全世界的IT页贡献出力量。这个有一个好处,就是任凭你自己的兴趣,喜欢游戏的可以开发游戏,想搞unix的可以开发内核什么的。
这个最后一定要进入一个很好的自由社区,比如apache基金会或是GNU基金会,想在后一代的着名程序比如apache httpd,tomcat,kerneln.n上刻上自己的名字就可以向这方面发展。也可以在sourceforge.net上找找自己喜欢的工程,申请加入..如果搞的好还能有基金会的money外快又能满足自己的兴趣,可惜我现在没钱,否则早干了....

那个时候,你已经有找一份很体面的工作的实力了..干什么都可以轻轻松松的..
不论走到哪,c语言还是根本,不论IT格局怎么变,有C语言有如心中一块石头,它是不可能变的,就像tcp/ip,不管上层再有什么技术,基本原理和接口20几年就是没有变过!
回顾几年的IT学习生涯,就像是浓缩的过程,东西越学越少,最后好像只有c语言了....

❺ 谁能提供个lzw压缩算法的c语言完整实现

程序由五个模块组成。(1) 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;
}
//------------------------------------------------------------------------------
VOID stack_destory( PSTACK_DATA stack )
{
GlobalUnlock( stack->h_stack );
GlobalFree ( stack->h_stack );
}
//------------------------------------------------------------------------------
VOID buffer_create( PBUFFER_DATA buffer )
{
buffer->h_buffer = GlobalAlloc( GHND, BUFFERSIZE*sizeof(BYTE) );
buffer->lp_buffer = GlobalLock( buffer->h_buffer );
buffer->top = 0;
buffer->index = 0;
buffer->by_left = 0;
buffer->dw_buffer = 0;
buffer->end_flag = FALSE;
}
//------------------------------------------------------------------------------
VOID buffer_destory( PBUFFER_DATA buffer )
{
GlobalUnlock( buffer->h_buffer );
GlobalFree ( buffer->h_buffer );
}
//------------------------------------------------------------------------------
VOID re_init_lzw( PLZW_DATA lzw ) //When code table reached its top it should
{ //be reinitialized.
memset( lzw->lp_code, 0xFFFF, TABLE_LEN*sizeof(WORD) );
lzw->code = LZW_BASE;
lzw->cur_code_len = 9;
}
//------------------------------------------------------------------------------
VOID lzw_create(PLZW_DATA lzw, HANDLE h_sour, HANDLE h_dest)
{
WORD i;
lzw->h_code = GlobalAlloc( GHND, TABLE_LEN*sizeof(WORD) );
lzw->h_prefix = GlobalAlloc( GHND, TABLE_LEN*sizeof(WORD) );
lzw->h_suffix = GlobalAlloc( GHND, TABLE_LEN*sizeof(BYTE) );
lzw->lp_code = GlobalLock( lzw->h_code );
lzw->lp_prefix = GlobalLock( lzw->h_prefix );
lzw->lp_suffix = GlobalLock( lzw->h_suffix );
lzw->code = LZW_BASE;
lzw->cur_code_len = 9;
lzw->h_sour = h_sour;
lzw->h_dest = h_dest;
memset( lzw->lp_code, 0xFFFF, TABLE_LEN*sizeof(WORD) );}
//------------------------------------------------------------------------------
VOID lzw_destory(PLZW_DATA lzw)
{
GlobalUnlock( lzw->h_code );
GlobalUnlock( lzw->h_prefix );
GlobalUnlock( lzw->h_suffix );GlobalFree( lzw->h_code );
GlobalFree( lzw->h_prefix );
GlobalFree( lzw->h_suffix );
}
//------------------------------------------------------------------------------
#endif(2) fileio.h 定义了一些文件操作#ifndef __FILEIO_H__
#define __FILEIO_H__
//------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
//------------------------------------------------------------------------------
HANDLE file_handle(CHAR* file_name)
{
HANDLE h_file;
h_file = CreateFile(file_name,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
0,
NULL
);
return h_file;
}
//------------------------------------------------------------------------------
WORD load_buffer(HANDLE h_sour, PBUFFER_DATA buffer) // Load file to buffer
{
DWORD ret;
ReadFile(h_sour,buffer->lp_buffer,BUFFERSIZE,&ret,NULL);
buffer->index = 0;
buffer->top = (WORD)ret;
return (WORD)ret;
}
//------------------------------------------------------------------------------
WORD empty_buffer( PLZW_DATA lzw, PBUFFER_DATA buffer)// Output buffer to file
{

DWORD ret;
if(buffer->end_flag) // The flag mark the end of decode
{
if( buffer->by_left )
{
buffer->lp_buffer[ buffer->index++ ] = (BYTE)( buffer->dw_buffer >> 32-buffer->by_left )<<(8-buffer->by_left);
}
}
WriteFile(lzw->h_dest, buffer->lp_buffer,buffer->index,&ret,NULL);
buffer->index = 0;
buffer->top = ret;
return (WORD)ret;
}
//------------------------------------------------------------------------------
#endif

❻ 急求lzw算法的英文文本压缩C语言源代码!

#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>//用来计算压缩的时间
using namespace std;

//定义常数
const int MAX = 1000003;//最大code数,是一个素数,求模是速度比较快
const int ascii = 256; //ascii代码的数量
const int ByteSize = 8; //8个字节

struct Element//hash表中的元素
{
int key;
int code;
Element *next;
}*table[MAX];//hash表

int hashfunction(int key)//hash函数
{
return key%MAX;
}
void hashinit(void)//hash表初始化
{
memset(table,0,sizeof(table));
}
void hashinsert(Element element)//hash表的插入
{
int k = hashfunction(element.key);
if(table[k]!=NULL)
{
Element *e=table[k];
while(e->next!=NULL)
{
e=e->next;
}
e->next=new Element;
e=e->next;
e->key = element.key;
e->code = element.code;
e->next = NULL;
}
else
{
table[k]=new Element;
table[k]->key = element.key;
table[k]->code = element.code;
table[k]->next = NULL;
}
}
bool hashfind(int key,Element &element)//hash表的查找
{
int k = hashfunction(key);
if(table[k]!=NULL)
{
Element *e=table[k];
while(e!=NULL)
{
if(e->key == key)
{
element.key = e->key;
element.code = e->code;
return true;
}
e=e->next;
}
return false;
}
else
{
return false;
}
}
void compress(void)//压缩程序
{
//打开一个流供写入
FILE *fp;
fp = fopen("result.dat", "wb");

Element element;
int used;
char c;
int pcode, k;

for(int i=0;i<ascii;i++)
{
element.key = i;
element.code = i;
hashinsert(element);
}
used = ascii;

c = getchar();
pcode = c;
while((c = getchar()) != EOF)
{
k = (pcode << ByteSize) + c;
if(hashfind(k, element))
pcode = element.code;
else
{
//cout<<pcode<<' ';
fwrite(&pcode, sizeof(pcode), 1, fp);
element.code = used++;
element.key = (pcode << ByteSize) | c;
hashinsert(element);
pcode = c;
}
}
//cout<<pcode<<endl;
fwrite(&pcode, sizeof(pcode), 1, fp);

}
int main(void)
{
int t1,t2;

//欲压缩的文本文件
//freopen("input.txt","r",stdin);
freopen("book5.txt","r",stdin);

t1=time(NULL);
hashinit();
compress();
t2=time(NULL);

cout<<"Compress complete! See result.dat."<<endl;
cout<<endl<<"Total use "<<t2-t1<<" seconds."<<endl;

❼ 跪求C语言进行哈夫曼编码、算术编码和LZW编码,要求源程序要有注释。

以下是哈夫曼编码
#include<iostream>
#include<math.h>
#include<string>
#include<iomanip>
using namespace std;

int n;

int isin(string str,char a)
{
int temp=0;
for(int i=0;i<str.length();i++)
{
if(str[i]==a) temp=1;
}
return temp;
}
void bubble(double p[],string sign[])//排序
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(p[i]<p[j])
{
double temp=p[i];
p[i]=p[j];
p[j]=temp;
string m=sign[i];
sign[i]=sign[j];
sign[j]=m;
}
}
}
}
void huff(double tempp[],string tempstr[])
{
double p[20][20];
string sign[20][20];
sign[0][i]=tempstr[i]; //符号放在sign数组中
for(int i=0;i<n;i++)
{
p[0][i]=tempp[i]; //p数组放对应的概率(第1列中)
}
for(i=0;i<n-1;i++)
{
bubble(p[i],sign[i]); //第一次排序
for(int j=0;j<n-2-i;j++)
{
p[i+1][j]=p[i][j]; //前n-2-i个概率重新放在p数组中(是数组的第2列中)
sign[i+1][j]=sign[i][j];
}
p[i+1][j]=p[i][j]+p[i][j+1];//第一次两个最小概率求和
sign[i+1][j]=sign[i][j]+sign[i][j+1];//符号跟随
for(j=n-1-i;j<n;j++)
{
p[i+1][j]=0;
}
}
string final[20];
for(i=n-2;i>=0;i--)
{
for(int k=0;k<n;k++)
{
if(isin(sign[i][n-2-i],sign[0][k][0])) final[k]+="0";
if(isin(sign[i][n-1-i],sign[0][k][0])) final[k]+="1";
}
}
cout<<setw(9)<<"哈弗曼编码如下:"<<endl;
for(i=0;i<n;i++)
{
cout<<setw(7)<<sign[0][i]<<setw(7)<<p[0][i]<<setw(10)<<final[i]<<
setw(7)<<final[i].length()<<endl;
}
}
void main()
{
char a[50];
cout<<"该字符串符号为:";
cin>>a;
string s=a;
n=s.length();
char b[20][2];
for(int i=0;i<n;i++)
{
b[i][0]=a[i];
b[i][1]='\0';
}
string str[20];
for(i=0;i<n;i++)
{
str[i]=b[i];
}
double tempp[20];
cout<<"字符概率依次为:";
for(i=0;i<n;i++)
{
cin>>tempp[i];
}
huff(tempp,str);
}

❽ 如何用C语言读取1位BMP 将图像信息转换成1 0放入二维数组中

在VC++环境下BMP图像文件与GIF图像文件的转换。首先分析了BMP与GIF2种图像的具体格式,然后在VC++环境下建立自己的函数库文件DIB.H和DIB.CPP,对即将使用的数据成员和函数成员进行初始化,从而实现BMP图像的读取、显示和保存等相关操作。在理解LZW编码算法原理的基础上,在VC++下实现该算法。同时,通过前面建立的BMP图像函数库,调用相关函数,就可以找到相应的具体的图像数据,进而通过LZW编码将BMP图像数据转换成GIF图像数据,实现图像格式的转换

❾ LZSS算法名称的由来

LZSS是一种由LZ77改进的基于字典压缩的编码,LZSS编码的原理是搜索目前未压缩的数据是否在前面出现过,如果出现过则利用前面出现的位置和长度代替现在的未压缩数据。
LZ77算法是由 Lempel-Ziv 在1977发明的。LZ77算法有许多变种算法,LZSS算法是LZ77其中一种变形,虽然LZ77有多种变形算法,但是这些基于LZ77变形的算法背后的原理都是一样的。
请原谅我复制了上面俩段
我只是想告诉你 加上我自己的认知和我在网上能搜索到的所有内容来告诉你
LZSS 后SS是一种算法 不代表意义
不是人名 就象LZ77一样
它是演变过来的 区别LZ77 以LZSS算法的形式
后面SS 是代表这种算法的规律和变化
所以就象加减乘除 它仅代表一种运算方式
看到LZSS你就想到了这 LZ77又是另一种
不知道我的浅薄解释您满意不?

阅读全文

与lzw算法c语言相关的资料

热点内容
鲁班锁解压吗 浏览:395
打包发送文件如何加密 浏览:213
centos解压缩zip 浏览:387
我的世界怎么用命令风块取消指令 浏览:1000
安卓软件请求超时怎么办 浏览:476
androidapp调用另一个app 浏览:621
数控铣床法兰克子程序编程 浏览:173
linux打包命令targz 浏览:996
抖音app是哪个 浏览:407
苹果app怎么上架 浏览:255
NA服务器地址 浏览:427
我的世界如何初始化服务器 浏览:97
哪个手机app天气预报最准 浏览:752
怎样把视频压缩至25m 浏览:570
vivox27文件夹怎么改变 浏览:727
新手玩狼人杀用什么app 浏览:615
pdf在线查看 浏览:954
安卓tv90如何关闭后台 浏览:683
php读取word乱码 浏览:755
minicom源码 浏览:1002