c语言哈夫曼压缩文件,用哈夫曼压缩文件(C语言).doc

用哈夫曼压缩文件(C语言)??

2007-12-29 21:09:15|??分类: \o "编程" 编程 |??标签: |字号大中小?订阅

利用哈夫曼编码制作压缩软件,内容如下:

#include #include #include #include

struct head {unsigned char b;?????????? //记录字符在数组中的位置long count;???????????? //字符出现频率(权值) long parent,lch,rch;??? //定义哈夫曼树指针变量char bits[256];???????? //定义存储哈夫曼编码的数组} header[512],tmp;

/*压缩*/void compress() {char filename[255],outputfile[255],buf[512]; unsigned char c; long i,j,m,n,f; long min1,pt1,flength,length1,length2; double div;FILE *ifp,*ofp; printf("\t请您输入需要压缩的文件:"); gets(filename); ifp=fopen(filename,"rb"); if(ifp==NULL) {?? printf("\n\t文件打开失败!\n\n"); ?? return; }printf("\t请您输入压缩后的文件名:"); gets(outputfile); ofp=fopen(strcat(outputfile,".hub"),"wb"); if(ofp==NULL) {?? printf("\n\t压缩文件失败!\n\n"); ?? return; }flength=0; while(!feof(ifp)) {?? fread(&c,1,1,ifp); ?? header[c].count++;??? //字符重复出现频率+1?? flength++;??????????? //字符出现原文件长度+1}flength--; length1=flength;????????? //原文件长度用作求压缩率的分母header[c].count--; for(i=0;i<512;i++) {?? if(header[i].count!=0) header[i].b=(unsigned char)i; ?? /*将每个哈夫曼码值及其对应的ASCII码存放在一维数组header[i]中,?? 且编码表中的下标和ASCII码满足顺序存放关系*/?? else header[i].b=0; ?? header[i].parent=-1;header[i].lch=header[i].rch=-1;??? //对结点进行初始化} for(i=0;i<256;i++)??? //根据频率(权值)大小,对结点进行排序,选择较小的结点进树{?? for(j=i+1;j<256;j++)?? {??? if(header[i].countheader[j].count) ??? {???? pt1=j; ???? min1=header[j].count; ???? continue; ??? } ?? }?? header[i].count=header[pt1].count; ?? header[pt1].parent=i;?? //依据parent域值(结点层数)确定树中结点之间的关系?? h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值