c語言 哈夫曼編碼

2021-07-26 20:38:34 字數 2540 閱讀 9420

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