壓縮:統計詞頻--->建立huffman樹--->儲存詞頻--->逐個位元組轉換為編碼寫入
解壓:讀取詞頻--->建立huffman樹---->讀取編碼重走huffman樹返回對應字元
#include #include #include #include #include #include #include #define ok 1
using namespace std;
using std::bitset;
file* outputfile;
file* inputfile;
typedef int status;
char func[3][15] = ;
typedef structhtnode,*huffmantree;
typedef char ** huffmancode;//動態分配陣列儲存huffman編碼表
status select(huffmantree ht,int range,int &min1,int &min2)
else if(ht[i].weight < min2w && i != min1)
}//if
}//for
return ok;
}//select
status huffmancoding(huffmantree &ht,huffmancode &hc,unsigned long long * weight,int n);
for(;i <= m;i++,p++) *p = ;
for(i = n+1;i <= m;i++)//for
//從葉子向根逆向求每個字元的huffman編碼
hc = (huffmancode)malloc((n+1) * sizeof(char*)); //編碼頭指標向量
char* cd = (char*)malloc(n*sizeof(char)); //求編碼工作空間
cd[n-1] = '\0';
for(i = 1;i <= n;i++)//for
free(cd);
return ok;
}//huffmancodin
status compress();
char tmp;
cout<<"正在進行詞頻統計......"<= 8)//if
if(!end_flag && str_huffmancode.length() < 8)//if
}//while
fwrite(&last,sizeof(int),1,outputfile);
cout<<"壓縮完成"unsigned int res = 511;
while(1)//if
}//for
}//if
else//if
}//for
break;
}//else
}//if
}//while
cout<<"解壓完成"<
Huffman 編碼壓縮解壓
說明 某技校資料結構課作業 目前的演算法只對有規律的檔案有效。此處的規律指的是0x00到0xff的分布不均勻 txt檔案不論漢字還是英文有效。jpg,pdf壓縮無效。以下內容毫無邏輯,不具有參考價值。參考資料 思路建立 1.讀寫二進位制檔案file fi fopen origin.data rb f...
解壓縮編碼列表
給你乙個以行程長度編碼壓縮的整數列表 nums 考慮每對相鄰的兩個元素 freq,val nums 2 i nums 2 i 1 其中 i 0 每一對都表示解壓後子列表中有 freq 個值為 val 的元素,你需要從左到右連線所有子列表以生成解壓後的列表。請你返回解壓後的列表。示例 輸入 nums ...
Huffman編碼壓縮演算法之壓縮與解壓篇
今天的課程設計終於查完了,做了將近一周的huffman也暫時告一段落了。其間用到了壓縮,又開拓了眼界,又認識了乙個標頭檔案,那我們接下來就小結一下用到的壓縮方法。壓縮 while str.size 8 我們壓縮的時候肯定不會這麼巧剛好是8位的,我們就需要處理一下,判斷最後剩下的str.size 的大...