已知某系统在通信联络中只可能出现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