[cpp]view plain
copy
#include
#include
#include//malloc的標頭檔案,也可以用malloc.h
#include
using
namespace std;
int num[26]; //存放個字母出現的次數
char str[50];
typedef
structhtnode,*huffmantree;
typedef
char **hfmcode;
void select(huffmantree &ht,int n,int *p1,int *p2) //select函式,選出ht樹到n為止,權值最小且parent為-1的2個節點
} for(i=j+1;iif(ht[i].weight
} for(j=0;jif(ht[j].parent==-1&&x!=j)
} for(i=j+1;i
} if(x>y)
else
} void hfmcoding(huffmantree &ht,hfmcode &hc,int w,int n) //構建哈夫曼樹ht,並求出n個字元的哈夫曼編碼hc
m=2*n-1;
ht=(huffmantree)malloc((m+1)*sizeof(htnode));
for(i=0;i//初始化n個葉子結點
for(;i//初始化其餘的結點
for(i=n;i//建立哈夫曼樹
hc=(hfmcode)malloc((n+1)*sizeof(char *));
cd=(char *)malloc(n*sizeof(char));
cd[n-1]='\0';
for(i=0;i//給n個字元編碼
else
} hc[i]=(char*)malloc((n-start)*sizeof(char));
strcpy(hc[i],&cd[start]);
} free(cd);
} void main()
cout<
} hfmcoding(ht,hc,w,n);
cout<
int k=2*n-2;
cout<
cin>>str1;
cout<
for(i=0;i
} else
if(str1[i]=='1')
} } cout<
}
執行結果:
第六周作業1 利用哈夫曼編碼字母表
1.哈夫曼編碼。對教材p167中習題5.18,思考並完成問題a d。下表給出了英文本母 包括用於分割單詞的空格 在某文集中的出現頻率。空格 18.3 r 4.8 y 1.6 e 10.2 d 3.5 p 1.6 t 7.7 l 3.4 b 1.3 a 6.8 c 2.6 v 0.9 o 5.9 u ...
哈夫曼編碼實現
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...