- 8
- 0
- 约4.04千字
- 约 8页
- 2016-10-20 发布于湖北
- 举报
华北水利水电大学 数据结构 实验报告
2015~2016学年 第 二 学期 2015级 计算机科学与技术(专升本)专业
班级: 2015221 学号:201522122 姓名: 赵敏
实验三 树的应用
实验题目:
树的应用——哈夫曼编码
实验内容:
利用哈夫曼编码进行通信可以大大提高信道的利用率,缩短信息传输的时间,降低传输成本。根据哈夫曼编码的原理,编写一个程序,在用户输入结点权值的基础上求哈夫曼编码。
从键盘输入若干字符及每个字符出现的频率,将字符出现的频率作为结点的权值,建立哈夫曼树,求出各字符的哈夫曼编码。要求:
输出存放哈夫曼树的数组HT的初态和终态;
输出每个字符的哈夫曼编码;
输入由上述若干字符组成的字符串,对电文进行编码并输出;
(选作)输入电文的哈夫曼编码,进行译码并输出。
实验要求:
使用C语言完成算法设计和程序设计并上机调试通过。
撰写实验报告,提供实验结果和数据。
写出算法设计小结和心得。
程序源代码:
#includeiostream.h
#includestdlib.h
#includestring.h
#define N 50
typedef struct{
unsigned int weight;
unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;
typedef char **HuffmanCode;
void Select(HuffmanTree HT,int i,int s1,int s2);
void reverse(char a[],int b);
void Huffmancoding(HuffmanTree HT,HuffmanCode HC,int *w,int n);
{
int m,i;
if(n=1)
return;
m=2*n-1;
HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode);
p=NULL;
for(p=HT+1,i=1;i=n;++i,++p,++w)
{
p-weight= *w;
p-parent=0;
p-lchild=0;
p-rchild=0;
}
for(i=n+1;i=m;++i;++p)
{
p-weight=0;
p-parent=0;
p-lchild=0;
p-rchild=0;
}
cout初态:endl;
coutnode\tweight\tparent\tlchild\trchildendl;
p=HT+1;
for(i=1;i=m;i++,++p)
{
cout%d\t%d\t%d\t%d\t%d\n,i,p-weight,p-parent,p-lchild,p-rchildendl;
}
cout\nendl;
int s1,s2,t;
for(i=n+1;i=m;++i)
{t=i-1;
s1=s2=0;
Select(HT,t,s1,s2);
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;
}
cout终态:endl;
coutnode\tweight\tparent\tlchild\trchildendl;
p=HT+1;
for(i=1;i=m;i++;++p)
{ unsigned int c,f;
char *cd;
cd=NULL;
HC=(HuffmanCode)malloc((n+1)*sizeof(char *));
cd=(char *)malloc(n*sizeof(char));
for(i=1;i=n;++i)
{ start=0;
for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent)
if(HT[f].lchild==c)
cd[start++]=0;
else
cd[start++]=1;
cd[start]=\0;
k=strlen(cd);
reverse(cd,k);
HC[i]=(char *)malloc((n-start)*sizeof(char)
原创力文档

文档评论(0)