c語言哈夫曼編碼

2021-07-26 17:25:03 字數 1819 閱讀 5540

#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...