- 初始化.从终端读入字符集大小n及n个字符和n个权值,建立哈夫曼树,井将它存
于文件HuffmanTree中。
- 编码。利用已建立好的哈夫曼树(如不在内存,则从文件HuffmanTree中读入)。对文件tobetrans中的正文进行编码,然后将结果存入文件codefile中。
- 解码。利用已建立好的哈夫曼树将文件codefile中的代码进行译码,结果存入testfile中。
- 打印代码文件。将文件codefile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件codeprint中。
- 打印哈夫曼树。将已在内存中的哈夫曼树直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件treeprint中。
-
# include<stdio.h> # include<stdlib.h> # include<string.h> typedef struct Htree { char c; int weight; int parent,lchild,rchild; }Htree,*HuffmanTree; typedef char ** HuffmanCode; //选择权重值最小的下标 int select(HuffmanTree Ht,int n) { int min,i; for(i=1;i<=n;i++) { if(Ht[i].parent == 0) { min=i; break; } } for(i=i+1;i<=n;i++) { if(Ht[i].parent == 0) { if(Ht[i].weight<Ht[min].weight) min=i; } } return min; } //创建哈夫曼树 void CreatHuffmanTree(HuffmanTree &Ht,int n) { int i,j,m,a,b; m=2*n-1; Ht=new Htree[m+1]; Ht[0].weight=n;//储存顺序表有多少个元素 for(i=1;i<=m;i++) { Ht[i].lchild=Ht[i].rchild=Ht[i].parent=0; } for(i=1;i