huffman實現檔案壓縮

2021-08-10 22:59:22 字數 1946 閱讀 7719

//mark一下
#include #include #include #include struct headheader[512],tmp;

void compress()

printf("destination filename:");

gets(outputfile);

ofp=fopen(outputfile,"wb");

if(ofp==null)

//開啟檔案

flength=0;

while(!feof(ifp))

flength--;

header[c].count--;//統計詞頻

for(i=0;i<512;i++)//賦初值

for(i=0;i<256;i++)

}//找到權值最小的min1

header[i].count=header[pt1].count;

header[pt1].parent=i;

header[i].lch=pt1;

min1=999999999;

for(j=0;jheader[j].count)

}header[i].count+=header[pt1].count;

header[i].rch=pt1;

header[pt1].parent=i;

}//構建huffman樹

for(i=0;i=8)

fwrite(&c,1,1,ofp);

pt1++;

strcpy(buf,buf+8);

j=strlen(buf);

}if(f%1000000==0)

printf("\r完成度%.2f",(float)f/flength);

if(f==flength)

}if(j>0)

fwrite(&c,1,1,ofp);

pt1++;

}//壓縮寫入

fseek(ofp,4,seek_set);

fwrite(&pt1,sizeof(long),1,ofp);//寫入標記

fseek(ofp,pt1,seek_set);

fwrite(&n,sizeof(long),1,ofp);//從標記處開始寫,先寫n

for(i=0;i0) m=p/8+1;

else m=p/8;//求字元表示的編碼長

for(j=0;jf;l--)strcat(header[i].bits,"0");

//補成8位

strcat(header[i].bits,buf);

}header[i].bits[p]=0;//多餘「0"會寫在0之後,準確還原編碼

}//讀取壓縮資訊

for(i=0;istrlen(header[j].bits))

}}//排序

p=strlen(header[n-1].bits);//最長的編碼長度

fseek(ifp,8,seek_set);

m=0;

bx[0]=0;

while(1)

for(i=0;iif(memcmp(header[i].bits,bx,header[i].count)==0)break;

strcpy(bx,bx+header[i].count);

c=header[i].b;

fwrite(&c,1,1,ofp);

m++;

if(m%1000000==0)

printf("\r完成度%.2f",(float)m/flength);

if(m==flength)

}fclose(ifp);

fclose(ofp);

printf("uncompress successfully!\n");

return;

}int main()

}

Huffman實現檔案壓縮

pragma once includeusing namespace std include huffmantree.hpp typedef long long longtype define debug 檔案資訊 struct fileinfo bool operator const filein...

利用Huffman樹實現檔案壓縮

利用huffman樹實現檔案壓縮 使用的編輯語言是c 專案目的是能夠實現對檔案的壓縮及解壓,涉及到的技術主要有huffman樹的實現,檔案的io操作,優先順序佇列等 整體思路 整個過程是依賴於huffman樹,因此要構建出乙個可供我們使用的huffman樹 壓縮時,操作原始檔,以字元形式讀取檔案資訊...

huffman編碼實現資料壓縮

huffman編碼壓縮 huffman編碼壓縮的 如下 主方法 public static void main string args 2.統計內容的字元數量,構建list為哈夫曼樹做準備 將統計字元個數的方法封裝 public static list countcharnum byte bytes...