/*哈夫曼編碼實現huffmantree.c*/
#include#include#includetypedef struct
htnode,*huffmantree; //動態分配陣列儲存哈夫曼樹
typedef char **huffmancode; //動態分配陣列儲存哈夫曼編碼
void select(huffmantree *ht,int n,int *s1,int *s2)
else
}for(i=i+1;i<=n;i++) }
void crthuffmantree(huffmantree *ht,huffmancode *hc,float *w,int n)
for(i=n+1;i<=m;i++) //非葉子節點初始化
for(i=n+1;i<=m;i++) //建立非葉子節點,建造哈夫曼樹
/*哈夫曼樹建造完畢*/
/*從葉子到根,逆向求每個葉子節點對應的哈夫曼編碼*/
*hc=(huffmancode)malloc((n+1)*sizeof(char *));//分配乙個指標陣列儲存n個編碼(1~n)的頭指標
cd=(char *)malloc(n*sizeof(char)); //分配求當前編碼的臨時空間
cd[n-1]='\0'; //從右向左逐位存放編碼,首先存放編碼結束符
for(i=1;i<=n;i++) /*求n個葉子節點對應的哈夫曼編碼*/
free(cd);
}int main()
n=n-1;
printf("請輸入%d個字母: ",n);
fflush(stdin);
fgets(word+1,n+1,stdin);
crthuffmantree(&ht,&hc,w,n);
printf("對應的哈夫曼編碼依次是: \n");
for(i=1;i<=n;i++)
printf("%s\n",hc[i]);
printf("請輸入要解碼的0,1序列:");
scanf("%s",ch);
for(i=1;i<=n;i++)
if(strcmp(ch,hc[i])==0)
break;
printf("該字母是:%c\n",word[i]);
return 0;
}
演算法 哈夫曼編碼
計算機中使用二進位制編碼字元 哈夫曼編碼是通過構造哈夫曼樹得到的,哈夫曼樹是通過貪心演算法得到的 貪心演算法構造哈夫曼樹 將字元出現的次數作為哈夫曼樹的權值,按照貪心演算法,選擇權值最小的兩個結點,成為乙個數的左右結點 左右子結點的權值變為子樹根的權值 然後在餘下的結點中遞迴選用最小的兩個結點 根據...
哈夫曼編碼實現
define huffmancode char typedef struct node huffmantree struct node 葉節點為n的哈夫曼樹有2 n 1個節點 用 1表示當前parent未被訪問 huffmantree createhuffmantree int wet,int n ...
實現哈夫曼編碼
include include include include include using namespace std typedef struct node vector nodes 表示結點的指標組 double char number 0 每個字元平均花費的編碼長度 const int cha...