91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 5KB
    文件類型: .cpp
    金幣: 1
    下載: 1 次
    發布日期: 2022-01-06
  • 語言: C/C++
  • 標簽: 赫夫曼??

資源簡介

利用二叉樹結構實現赫夫曼編/解碼器。 基本要求: 1、 初始化(Init):能夠對輸入的任意長度的字符串s進行統計,統計每個字符的頻度,并建立赫夫曼樹 2、 建立編碼表(CreateTable):利用已經建好的赫夫曼樹進行編碼,并將每個字符的編碼輸出。 3、 編碼(Encoding):根據編碼表對輸入的字符串進行編碼,并將編碼后的字符串輸出。 4、 譯碼(Decoding):利用已經建好的赫夫曼樹對編碼后的字符串進行譯碼,并輸出譯碼結果。 5、 打印(Print):以直觀的方式打印赫夫曼樹(選作) 6、 計算輸入的字符串編碼前和編碼后的長度,并進行分析,討論赫夫曼編碼的壓縮效果。 測試數據: I love data Structure, I love Computer. I will try my best to study data Structure.

資源截圖

代碼片段和文件信息

/*(二)內容2
利用二叉樹結構實現赫夫曼編/解碼器。
基本要求:
1、 初始化(Init):能夠對輸入的任意長度的字符串s進行統計,統計每個字符的頻度,并建立赫夫曼樹
2、 建立編碼表(CreateTable):利用已經建好的赫夫曼樹進行編碼,并將每個字符的編碼輸出。
3、 編碼(Encoding):根據編碼表對輸入的字符串進行編碼,并將編碼后的字符串輸出。
4、 譯碼(Decoding):利用已經建好的赫夫曼樹對編碼后的字符串進行譯碼,并輸出譯碼結果。
5、 打印(Print):以直觀的方式打印赫夫曼樹(選作)
6、 計算輸入的字符串編碼前和編碼后的長度,并進行分析,討論赫夫曼編碼的壓縮效果。

測試數據:
???I?love?data?Structure?I?love?Computer.?I?will?try?my?best?to?
study?data?Structure.*/?
//?實現赫夫曼編碼,實現P147算法6.12的程序。
#include
#include
#include
#include
#define?UINT_MAX?32677
//?赫夫曼樹和赫夫曼編碼的存儲表示
typedef?struct
{
char?ch;
??unsigned?int?weight;
??unsigned?int?parentlchildrchild;
}HTNode*HuffmanTree;?//?動態分配數組存儲赫夫曼樹
typedef?char?**HuffmanCode;?//?動態分配數組存儲赫夫曼編碼表
//?函數void?select()調用
int?min1(HuffmanTree?tint?i)
?{?
???int?jflag;
???unsigned?int?k=UINT_MAX;?//?取k為不小于可能的值
???for(j=1;j<=i;j++)
?????if(t[j].weight???????k=t[j].weightflag=j;
???t[flag].parent=1;
???return?flag;
?}
void?select(HuffmanTree?tint?iint?&s1int?&s2)
?{?//?s1為最小的兩個值中序號小的那個
???int?j;
???s1=min1(ti);
???s2=min1(ti);
???if(s1>s2)
???{
?????j=s1;
?????s1=s2;
?????s2=j;
???}
?}
//?P147算法6.12的實現
?void?HuffmanCoding(HuffmanTree?&HTHuffmanCode?&HCint?w[50]int?nint?jint?a[50]char?s[100])?
?{?//?w存放n個字符的權值(均>0)構造赫夫曼樹HT并求出n個字符的赫夫曼編碼HC
???int?mis1s2;
???HTNode?*p;
???if(n<=1)?return;
???m=2*n-1;
???HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));?//?0號單元未用
????/*for(p=HT+1i=0;i<50;i++++p)
????????if(a[i]!=0)
????????{
????????????(*p).ch=i+‘a‘;
????????????
????????}*/
????for(p=HT+1i=1;i<=n;++i++p)?//?給赫夫曼樹的前n個結點賦初值
???{
?(*p).ch=s[i-1];
?????(*p).weight=w[i-1];
?????(*p).parent=0;
?????(*p).lchild=0;
?????(*p).rchild=0;
???}
???for(;i<=m;++i++p)?//?給赫夫曼樹的第n個結點后面的結點賦初值
???{?//(*p).weight=‘?‘;
?????(*p).weight=0;
?????(*p).parent=0;
?????(*p).lchild=0;
?????(*p).rchild=0;
???}
??//?構建赫夫曼樹
???for(i=n+1;i<=m;++i)?
???{?//?在HT[1~i-1]中選擇parent為0且weight最小的兩個結點其序號分別為s1和s2
?????select(HTi-1s1s2);
?????HT[s1].parent=HT[s2].parent=i;
?????HT[i].lchild=s1;
?????HT[i].rchild=s2;
?????HT[i].weight=HT[s1].weight+HT[s2].weight;
???}
???//?從葉子到根逆向求每個字符的赫夫曼編碼
???int?start;
???unsigned?cf;
???char?*cd;
???HC=(HuffmanCode)malloc((n+1)*

評論

共有 條評論