版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为Word版,下载可任意编辑——哈夫曼文本压缩C语言实现/*文件中有些参数定义的比较大,主要是为了适应较大文件的压缩*/#include#include#include
#include//用以删除多余的中间文件#defineM100000000000//最大字符数
intop,co[100];//编码表的扫描指针,简易栈co[]typedefstructHfnode//哈弗曼树结点类型{
intdata;//权值域charzimu;//存储字母
structHfnode*Lson,*Rson,*next;//儿子链域和森林链域
}Hfnode,*Hfptr;
typedefstructsnode//静态数组结点类型{
charc;//字符intf1;//频度}snode;
typedefstructLnode//编码表结点类型{charc;structLnode*next;}Lnode,*Lptr;
voidgotoxy(intx,inty){COORDcoord;coord.X=x;coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);}
voidpaint1(){
inti,j;for(j=0;jc=fgetc(fp)p->next=newLnode;p=p->next;
/*putchar(ch[i]);*/i++;
}
putchar(10);fclose(fp);return(i-1);}
intstat(Lptrp,snodech2[],intnum)//统计函数{
inti,j,last=0;for(i=0;ic)j++;if(j==last){}
ch2[j].c=p->c;ch2[j].f1=1;last++;
elsech2[j].f1++;p=p->next;}
return(last);}
voidorder(snodech2[],intn)//冒泡排序{inti,j,k,t;
chara;
for(i=0;idata=M;//构造监视原结点for(i=0;inext=newHfnode;//申请结点
p=p->next;p->Lson=p->Rson=NULL;//做叶节点}
p->zimu=ch2[i].c;
p->data=ch2[i].f1;//读入叶之权wi
p->next=h;//构成循环链returnh;
}
HfptrcreatHftree(Hfptrhead,intn)//构造树{
inti;
Hfptrp,q,r,t1,t2;
for(i=1;inext;//t1,t2指向两棵权最小的树根t2=t1->next;
r->data=t1->data+t2->data;//权值相加r->Lson=t1;//t1,t2做新根r的左右儿子
r->Rson=t2;head->next=t2->next;//从森林中删去t1,t2
q=head;//准备进行有序插入
p=head->next;//p是探寻指针,q是p的前驱while(1)//循环的为r寻觅有序位置
if(p->datadata)
{q=p;p=p->next;}//尚未找到时,继续循环
else{r->next=p;q->next=r;break;}//找到后,插入p}//终止for循环
p=head->next;
deletehead;//删去监视元
return(p);//返回huffman树之根}
//构造完毕
Lptrpop(intlast){}
voidcodelist(Hfptrp,Lnodelist[],intlast,inta)//造编码表的函数{if(p->Lson==NULL}
chartrans(inta[])//8位01整数转换为10进制数{
intj=0,y=0;do
{
y=y+a[j]*(int)pow(2,7-j%8);j++;
list[op].next=pop(last);op++;
return;}
codelist(p->Lson,list,last+1,co[last]=0);codelist(p->Rson,list,last+1,co[last]=1);inti;Lptrhead,p;head=p=newLnode;for(i=0;ic=co[i];
p->next=newLnode;p=p->next;
}
p->c=-1;
return(head);
}while(j%8);return(y);
}
intrestoretree(snodech2[],intnum2,intnum1,charoutfile[])
{}
FILE*out1;inti=0,j=0;
if((out1=fopen(outfile,\{
printf(\文件开启错误!\\n\exit(0);
}
fwrite(fwrite(j=j+4;
for(i=0;ic!=list[j].c)j++;p=list[j].next;i++;
q=q->next;j=0;
while(p->c!=-1p=p->next;
top++;if(top==8)
{fputc(trans(a),out);
top=0;
n++;}}}
if(topLson;elsep=p->Rson;
}
if(!feof(out1)fclose(out2);
DeleteFile(\if(i==-1)return0;elsereturn1;
voidmain(){
intnum1,num2,num3,choice,choice2;charoutfile[30];Lptrstrhead;
snodech2[300];
Lnodelist[3000];//编码表HfptrHfroot,head;do
{gotoxy(25,0);
printf(\小型文本压缩器\\n\
printf(\请输入需要进行的操作:\\n1——压缩;2——解压\\n\strhead=newLnode;op=0;
scanf(\gotoxy(0,3);
if(choice==1)//压缩部分{paint1();//优化界面函数
num1=putdata(strhead);//输入函数,num1记录字符总数num2=stat(strhead,ch2,num1);//统计函数,num2记录叶子数order(ch2,num2);//排序函数
head=inition(num2,ch2);//调用初始化函数
Hfroot=creatHftree(head,num2);//调用造树函数codelist(Hfroot,list,0,0);//造编码表gotoxy(0,8);
scanf(\
gotoxy(0,11);
printf(\请稍后...\
num3=restoretree(ch2,num2,num1,outfile);//存储哈夫曼树
num3=num3+compress(strhead,list,num1,outfile);//压缩函数,num3记录压缩后的字gotoxy(0,11);
printf(\计算压缩率gotoxy(0,13);
符数
}{
elseif(choice==2)//还原部分
paint2();//优化界面函数if(recover(ch2))
printf(\操作成功!\
gotoxy(0,1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四川遂宁大英县就业创业促进中心招聘城镇公益性岗位人员备考考试题库及答案解析
- 2025年福建泉州惠安县宏福殡仪服务有限公司招聘5人考试笔试模拟试题及答案解析
- 2025西安交通大学第一附属医院医学影像科招聘劳务派遣助理护士模拟笔试试题及答案解析
- 深度解析(2026)《GBT 26066-2010硅晶片上浅腐蚀坑检测的测试方法》
- 深度解析(2026)《GBT 26010-2010电接触银镍稀土材料》(2026年)深度解析
- 深度解析(2026)《GBT 25950-2010铝土矿 成分不均匀性的实验测定》(2026年)深度解析
- 深度解析(2026)《GBT 25886-2010养鸡场带鸡消毒技术要求》
- 深度解析(2026)《GBT 25822-2010车轴用异型及圆形无缝钢管》(2026年)深度解析
- 深度解析(2026)GBT 25753.2-2010真空技术 罗茨真空泵性能测量方法 第2部分:零流量压缩比的测量
- 深度解析(2026)GBT 25695-2010建筑施工机械与设备 旋挖钻机成孔施工通 用规程
- 2025年河南中原国际会展中心有限公司社会招聘44名笔试备考题库附答案解析
- 推广示范基地协议书
- 消防员心理健康教育课件
- 2025年服装行业五年发展时尚产业与可持续发展报告
- 《下肢深静脉血栓形成介入治疗护理实践指南》的解读2025
- 2025年社区电动汽车充电站建设项目可行性研究报告及总结分析
- 经营区域保护合同范本
- 中药热奄包疗法
- 安利四大基石课件
- 2025年滁州辅警招聘考试真题及答案详解(历年真题)
- GB/T 11143-2025加抑制剂矿物油在水存在下防锈性能试验法
评论
0/150
提交评论