資料結構上機作業3 哈夫曼編碼

2021-08-10 22:53:46 字數 2013 閱讀 5833

從鍵盤接收一串電文字元,輸入對應的huffman編碼。同時,能翻譯由huffman編碼生成的**串,輸出對應的電文字串。

1) 構造一棵 huffman樹。

2) 實現huffman編碼,並用huffman編碼生成的**串進行解碼。

3) 程式中字元和權值是可變的,實現程式的靈活性。

參考文章:

#include 

#include

#include

#define maxbit 100

#define maxvalue 10000

#define maxleaf 30

#define maxnode maxleaf*2 -1

typedef

struct

hcodetype; /* 編碼結構體 */

typedef

struct

hnodetype; /* 結點結構體 */

//構造乙個哈夫曼樹,n為葉子數

void createhuffmantree(hnodetype huffnode[maxnode],int n)

//給n個葉子結點賦權值

for(i=0;iprintf("請輸入第%d個葉子的權值:",i);

scanf("%d",&huffnode[i].weight);

}/*構建哈夫曼樹*/

for(i=0;i1;i++)

//m1取到最小值後,無論如何第乙個if都不會成立,此時elseif開始執行

else

if (huffnode[j].weight < m2 && huffnode[j].parent==-1)

}huffnode[x1].parent = n+i;

huffnode[x2].parent = n+i;

huffnode[n+i].weight = huffnode[x1].weight + huffnode[x2].weight;

huffnode[n+i].lchild = x1;

huffnode[n+i].rchild = x2;

printf ("x1.weight and x2.weight in round %d: %d, %d\n", i+1, huffnode[x1].weight, huffnode[x2].weight); /* 用於測試 */

printf ("\n");

}}/*解碼,string陣列是要破解的編碼;buf;n是葉子數*/

void decoding(char

string, hnodetype buf,int num)

i=0;

nump=&num[0];//nump指向編碼

while(nump<(&num[strlen(string)]))

else tmp=buf[tmp].rchild;

nump++;

}printf("%d",buf[tmp].value);

}}int main()

for(j=cd.start+1;j//因為在上面的while中,到了根結點後,start減了一下,故要+1

huffcode[i].bit[j]=cd.bit[j];//儲存編碼

huffcode[i].start=cd.start;//儲存每個編碼的起始位置

}/*輸出哈夫曼編碼*/

for(i=0;iprintf("第%d個葉子的哈夫曼編碼是:",i);

for(j=huffcode[i].start+1;jprintf("%d",huffcode[i].bit[j]);

}printf(" start:%d",huffcode[i].start);

printf("\n");

}printf("請輸入要破解的編碼:");

scanf("%s",&pp);

decoding(pp,huffnode,n);

getchar();

return

0;}

資料結構 哈夫曼樹 哈夫曼編碼

哈夫曼樹又稱最優樹 二叉樹 是一類帶權路徑最短的樹。構造這種樹的演算法最早是由哈夫曼 huffman 1952年提出,這種樹在資訊檢索中很有用。結點之間的路徑長度 從乙個結點到另乙個結點之間的分支數目。樹的路徑長度 從樹的根到樹中每乙個結點的路徑長度之和。結點的帶權路徑長度 從該結點到樹根之間的路徑...

哈夫曼編碼 哈夫曼樹 (資料結構)

哈夫曼編碼,又稱霍夫曼編碼,是一種編碼方式,哈夫曼編碼是可變字長編碼 vlc 的一種。huffman於1952年提出一種編碼方法,該方法完全依據字元出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做huffman編碼 有時也稱為霍夫曼編碼 include include inc...

資料結構 哈夫曼編碼

time limit 1000ms memory limit 65536kb submit statistic problem description 字元的編碼方式有多種,除了大家熟悉的ascii 編碼,哈夫曼編碼 huffman coding 也是一種編碼方式,它是可變字長編碼。該方法完全依據字...