//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...