- 1
- 0
- 约3.27千字
- 约 8页
- 2019-12-23 发布于湖北
- 举报
华北水利水电大学 数据结构 实验报告
实验三 树的应用
一、 实验题目:
树的应用——哈夫曼编码
二、 实验内容:
利用哈夫曼编码进行通信可以大大提高信道的利用率,缩短信息传输的时间,降低传输成本。根据哈夫曼编码的原理,编写一个程序,在用户输入结点权值的基础上求哈夫曼编码。
从键盘输入若干字符及每个字符出现的频率,将字符出现的频率作为结点的权值,建立哈夫曼树,求出各字符的哈夫曼编码。要求:
1. 输出存放哈夫曼树的数组HT的初态和终态;
2. 输出每个字符的哈夫曼编码;
3. 输入由上述若干字符组成的字符串,对电文进行编码并输出;
三、 程序源代码:
#include
#include
#include
#define N 8
#define M 4
typedef struct{
char data;
char *code;
unsigned int weight;
unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree; //动态分配数组存储赫夫曼树
typedef char **HuffmanCode; //动态分配数组存储赫夫曼编码表
void HuffmanCoding(HuffmanTree HT,HuffmanCode HC,char *data,int *w,int n,char *str
{
//存放n个字符的权值(均0,构造赫夫曼树HT,并求出n各字符的赫夫曼编码HC
if(n=1 return;
int m=2*n-1; //总节点数
HT=(HuffmanTreemalloc((m+1*sizeof(HTNode;//0号单元未用
HuffmanTree p;
int i,j;
printf(\n;
printf(------------------------------\n;
printf(存放哈夫曼树的数组HT的初态:\n;
printf(叶子节点以及它的双亲节点,权值,左孩子,右孩子分别为:\n;
for(p=HT+1,i=1;i=n;++i,++p,++data,++w
{
p-data=*data;
p-parent=p-lchild=p-rchild=0;
p-weight=*w;
p-code=(char *malloc(n*sizeof(char;
printf(%c %2d %2d %2d %2d\n,p-data,p-parent,p-weight,p-lchild,p-rchild;
}
for(;i=m;++p,++i
{
p-parent=p-lchild=p-rchild=p-weight=0;
p-data=NULL;
p-code=(char *malloc(n*sizeof(char;
printf( %2d %2d %2d %2d\n,p-parent,p-weight,p-lchild,p-rchild;
}
for(i=n+1;i=m;++i{//建赫夫曼树
//在HT[1--i-1]选择parent为0且weight最小的两个节点,其序号分别为s1和s2
unsigned int m1=32767;
unsigned int m2=32767;//m1,m2为最小和次小权值
int s1=0;
int s2=0;//s1,s2为最小和次小节点的序号
for(int k=1;k=i-1;k++
{
if((HT[k].parent==0(HT[k].weight
{
m2=m1;
s2=s1;
m1=HT[k].weight;
s1=k;
}
else if((HT[k].parent==0(HT[k].weight
{
m2=HT[k].weight;
s2=k;
}
}
HT[s1].parent=i;HT[s2].parent=i;
HT[i].lchild=s1;HT[i].rchild=s2;
HT[i].weight=HT[s1].weight+HT[s2].weight;
}
printf(\n;
printf(------------------------------\n;
printf(存放哈夫曼树的数组HT的终态:\n;
printf(叶子节点以及它的双亲节点,权值,左孩子,右孩子分别为:\n;
for(p=HT+1,i=1;i=n;++p,++i
printf(%c %2d %2d %2d %2d\n,p-data,p-parent,p-weight,p-lchild,p-rchild;
for(;i=m;++p,++i
printf( %2d %2d %2d %2d\n,p-parent,p-weight,p-lchild,p-rchild;
//----从叶子到根逆
您可能关注的文档
最近下载
- TIME时代 TDN 5000 全数字气保焊机使用说明书.pdf VIP
- 锂硫电池课件PPT.pptx VIP
- 人教版七年级英语下册全套新测试卷(配2025年春改版教材).pdf
- 2023年国家统一法律职业资格考试客观卷二真题含答案解析.docx VIP
- 大型可变体变构型航天器动力学模型重构方法.pdf VIP
- SMW 工法桩施工技术、质量要点.docx VIP
- 2025年军队文职人员统一招聘面试( 信息保障)预测题及答案.doc VIP
- 中国能源大数据报告(2025).docx VIP
- 政治试卷贵州省贵阳市2026届高三年级质量监测(11.21-11.22).docx VIP
- T_CRHA 073—2024(成人清洁间歇导尿护理).pdf VIP
原创力文档

文档评论(0)