实验四 LZW编码方案程序设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验四LZW编码方案程序设计 1、实验目的 (1)进一步熟悉通用编码算法; (2)掌握C语言程序设计和调试过程中数值的进制转换、数值与字符串之间的转换等技术。 2、实验要求 (1)输入:本程序将从标准输入中读入待压缩的数据流; (2)输出:将压缩结果输出到标准输出上去。 3、LZW算法描述 1:procedureLZW 2:字典初始化:将压缩文件中所有使用到的单字节字符放入字典中,为了压缩任何类型的文件,可以将字典的前256个位置(0x000到0x0FF)一次分配给0x00到0xFF的256个单字节字符。 3:动态数据初始化:初始化新单词存放位置指针P。将它指向字典的第一个空位置。例如P=256(即0x100),读入被压缩文件的第一个字符cha,作为待处理单词W。单词的前缀Q为空,即Q=4095,尾字符就是cha,序号(码字)就是cha的序号。 4:如果文件再没有字符了,输出当前单词的序号。编码结束。如果文件中还有字符,把当前单词W作为前缀,再从被压缩文件中读入一个字符CH,把CH作为尾字符,得到一个单词W。 5:如果字典中已有W,则将W看做当前单词W,返回第三步。如果字典中没有W(发现一个新单词),先将原单词W的序号输出,再加新单词W,增加到字典中,然后把刚刚读入的字符CH作为当前单词W,返回第三步。 6:endprocedure ******************************************************************************* 实验流程图: ******************************************************************************* 4、参考代码 /******************************************************************** *Author: *Date: *Copyright: *Purpose:UseLZWalgorithmtocodethesourcesymbols*********************************************************** #includestdio.h #includestdlib.h #includeconio.h structword{ unsignedintn; unsignedcharc; }w,wd[4096];//Dictionary unsignedintp,n; unsignedcharh,m,l,f; /*Outputthecode*/ voidout(intn) { if(f==0){ h=n/16; m=(n4)0xf0; f=1; } else{ m+=n/256; l=n0xff; fputc(h,stdout); fputc(m,stdout); fputc(l,stdout); h=m=l=f=0; } } /*Maincopressprogram*/ voidlzw() { intc,i; unsignedcharch; fprintf(stderr,\n\nbegincompress,pleasewait!\n); for(i=0;i256;i++){//Initializefirst256word wd[i].n=4095;//indictionary wd[i].c=i; } p=256; w.n=4095; w.c=n=fgetc(stdin); h=m=l=f=0 for(;;){ c=fgect(stdin); if(c==-1){ out(n); if(f) out(4095); fprintf(stderr,\n\ncompressionisover!\n); return; } ch=c; for(i=n+1;ip;i++){ if(wd[i].n!=n) continue; if(wd[i].c==ch) break; } if(i!=p){ w.n=n; w.c=ch; n=i; } else{ out(n); if(p4095){ wd[p].n=n; wd[p].c; p++; } w.n=4095; n=w.c=ch; } } } voidmai

文档评论(0)

linyin1994 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档