C Huffman編碼壓縮解壓

2021-08-10 13:34:07 字數 1506 閱讀 1102

壓縮:統計詞頻--->建立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 的大...