已知某系统在通信联络中只可能出现8种字符,其概率分别为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计哈夫曼编码。
综合训练:试编写一个将百分制分数转换为五级分制的程序。要求其时间性能尽可能好(即平均比较次数尽可能少)。假设学生成绩的分布情况如下:
分数 0-59 60-69 70-79 80-89 90-100
比例 0.05 0.15 0.40 0.30 0.10
#include
#include
#include
#define ERROR 0
#define OK 1
typedef int Status;
typedef struct {//声明哈夫曼树的结点
int weight;
int parent;
int lchild;
int rchild;
}Htnode,*Huffmantree;
typedef char ** Huffmancode;//相当于声明一个二维数组,来记录每个权值对应的编码。
void Select (Huffmantree &HT,int t,int &p,int &q);//选择结点中权值最小的两个结点,用p,q来返回。
void creathuffmantree(Huffmantree &HT,Huffmancode &HC,int *w,int n)//创建哈夫曼树。
{
int m,i,p,q,j,start,s;
if(n