#include
#include
#include
typedef struct character
character;
//一棵樹需要左孩子,右孩子,非葉子節點上的數字
typedef struct tree
tree;
//統計字串的各字元的頻率,以及記錄不同字元的個數,排序
character *getcharcount(int *count,char *string);
//輸出統計後各個字元,頻率
void showchar(tree *tree,int count);
//形成乙個二叉樹
void protree(tree *tree,int count,character *chars);
//形成編碼
void decode(tree *tree,int root,int index,char *code);
//編碼
void afterdecode(tree *tree,char *string,int count,char *afterstring);
//編碼後輸出
void putcode(char *string);
void putcode(char *string)
void afterdecode(tree *tree,char *string,int count,char *afterstring)}}
strcpy(string,afterstring);
}void decode(tree *tree,int root,int index,char *code)
else
}void protree(tree *tree,int count,character *chars)
for(i=count,j=i-2;i<2*count-1;i++)
}void showchar(tree *tree,int count)
} character *getcharcount(int *count,char *string)
;for(i=0;string[i];i++)
chars[string[i]]++;
for(i=0;i<256;i++)
}*count=k;
p=(character *)(calloc(sizeof(character),k));
for(i=0;i<256;i++)
}for(i=0;ifor(j=0;jif(p[j].count
for(i=0;ip[i].index=i;
return p;
}int main()
;character *chars;
tree *tree;
int count;
char code[256];
printf("請輸入一串字串:\n");
gets(string);
chars=getcharcount(&count,string);
tree=(tree *)(calloc(sizeof(tree),2*count-1));
protree(tree,count,chars);
decode(tree,2*count-2,0,code);
showchar(tree,count);
afterdecode(tree,string,count,afterstring);
putcode(string);
free(chars);
free(tree);
}
c語言 哈夫曼編碼
include include define maxsymbs 68 字元種數or葉子數 1 define maxnode 133 結點數 算出來m 67,父結點數為2 67 1 133僅對此文件有效,2 maxsymbs 1 void rate 求字元在文章中出現的頻率 void sort 排序 ...
哈夫曼樹與哈夫曼編碼 c語言詳解
本學期資料結構課程使用的教材為清華大學出版社的 資料結構 c語言版 由於書中採用了很多偽碼,使得對c語言掌握不是很熟悉的同學有學習上的困難。所以二叉樹章節中,我嘗試編寫出更適合新手的哈夫曼編碼的c語言程式,一方面幫助像我一樣的新手,一方面也積累自己的經驗。本人第一次寫部落格,如果有錯誤的地方,歡迎各...
哈夫曼編碼 C
我是從 資料結構與演算法 c 語言描述 這本書裡面抄的 程式可以正常執行 using system using system.collections.generic using system.linq using system.text namespace 哈夫曼編碼1 public huffman...