#include #include #define maxsymbs 68 //字元種數or葉子數+1
#define maxnode 133 //結點數:算出來m=67,父結點數為2*67-1=133僅對此文件有效,2*maxsymbs-1
void rate(); //求字元在文章中出現的頻率
void sort(); //排序
void huffmantree();//構造哈夫曼樹
void table(); //建立碼表
void huffmancode(); //哈夫曼編碼
void code_txt(); //對文件編碼
void decode_txt(); //解碼
int n[127] = ; //字元出現的次數
double symbrate[127] = ; //字元出現的頻率
int num = 0; //字元總數
int m = 0; //字元種數or葉子數
int code_num = 0; //編碼總數
struct huffnode
huff_node[maxnode];
struct huffcode
huff_code[maxsymbs], cd;
struct tab //碼表結構
tab[maxsymbs];
int main()
void rate()
while(!feof(fp))}}
fclose(fp);
//printf("%d",num);//test
out = fopen("rate.txt","w"); //建立檔案用於存放資料
if(out == null)
else
}fprintf(out,"project_huffman.txt 字元總數: %d\n",num);
fclose(out);
}return;
}void sort()
}for(i=0; i}
}/*test*/
/* for(i=0; i*/
}void huffmantree()
for(i=0; ielse if(huff_node[j].weight}
huff_node[x1].parent = m + i;//將找出的兩棵子樹合併為一棵子樹
huff_node[x2].parent = m + i;
huff_node[x2].flag = 1;
huff_node[x1].flag = 1;
huff_node[m+i].weight = huff_node[x1].weight + huff_node[x2].weight;
huff_node[m+i].lchild = x1;
huff_node[m+i].rchild = x2;
}/*test樹*/
/* for(i=0; i<2*m-1; i++)
*/}void huffmancode()
else
cd.start = cd.start - 1;
c = p;
p = huff_node[c].parent;
}cd.start++;
for(j=cd.start; j<=m; j++)
huff_code[i].start = cd.start;
/*test*/
// printf("\n%d start=%d\n",i,huff_code[i].start);
}}void table()
else
fprintf(fp,"\n");}}
fclose(fp);
return;
}void code_txt()
if((out = fopen("code_huffman.txt","w"))==null)
while(!feof(fp))
break;}}
}printf("code_num = %d",code_num);
fclose(fp);
fclose(out);
return;
}void decode_txt()
if((out = fopen("decode_huffman.txt","w"))==null)
c = 2 * m - 2; //根結點
while(!feof(fp))
else
}else
else}}
fclose(fp);
fclose(out);
return;
}
c語言哈夫曼編碼
include include include typedef struct character character 一棵樹需要左孩子,右孩子,非葉子節點上的數字 typedef struct tree tree 統計字串的各字元的頻率,以及記錄不同字元的個數,排序 character getcha...
哈夫曼樹與哈夫曼編碼 c語言詳解
本學期資料結構課程使用的教材為清華大學出版社的 資料結構 c語言版 由於書中採用了很多偽碼,使得對c語言掌握不是很熟悉的同學有學習上的困難。所以二叉樹章節中,我嘗試編寫出更適合新手的哈夫曼編碼的c語言程式,一方面幫助像我一樣的新手,一方面也積累自己的經驗。本人第一次寫部落格,如果有錯誤的地方,歡迎各...
哈夫曼編碼 C
我是從 資料結構與演算法 c 語言描述 這本書裡面抄的 程式可以正常執行 using system using system.collections.generic using system.linq using system.text namespace 哈夫曼編碼1 public huffman...