数据结构哈弗曼编码译码器课程设计[1](2)

2020-03-27 06:24

start=n-1;

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';

HC[i]=(char *)malloc((n-start)*sizeof(char)); strcpy(HC[i],&cd[start]); }

3.3译码:

基本思想:根据编码的具体过程,逆向推导。从第一个数值开始,如果为零则代表沿左节点元素,如果为一则代表右节点方向 主要步骤及主要功能函数: if(*code=='0')

find(HT,code,text,HT[m].lchild,m); else

find(HT,code,text,HT[m].rchild,m);

for(i=0;p[i]!='\\0';i++) //把译码好的字符存入文件textfile.txt中 fputc(p[i],fw);

3.4输出哈夫曼树:

基本思想:以凸凹的形式表现哈夫曼树的结构。首先统计叶子结点个数,然后构造一个矩阵,没有元素存在时用空格代替,否则将节点的权重值打印在终端 主要步骤及主要功能函数: (1)首先统计叶子节点的总个数 for(i=1;i<=2*n-1;i++) {

for (j=0;T[i][j]!=0;j++) {

if(T[i][j]==' ') {

printf(\ fputc(T[i][j],fp); } else

{printf(\ }

printf(\}

(2)建立矩阵,利用元素和空格构造一个凸凹的图像,直观的表现结构图,其中元素所在的列数即为在哈夫曼树中所在的层数

void Convert_tree(unsigned char T[100][100],int s,int *i,int j)

{ int k,l; l=++(*i); for(k=0;k

Convert_tree(T,s+1,i,HT[j].lchild); if(HT[j].rchild)

Convert_tree(T,s+1,i,HT[j].rchild); T[l][++k]='\\0'; }

3.5数据结构的定义

//////////////////////////////////////////////////////////////////////////////

/*定义赫夫曼树结点的结构体变量,存放结点的权值、字符、双亲、坐孩子和右孩子*/ typedef struct{

int weight;

char ch; //增加一个域用于存放该节点的字符 int parent,lchild,rchild; }HTNode,*HuffmanTree;

typedef char **HuffmanCode; //指向赫夫曼编码的指针

四.调试

4.1菜单选择及初始化哈夫曼树界面

4.2编码

将编码结果写入codefile文件中

4.3译码

在textfile文件中写入译码结果

4.4以凹凸表形式打印哈夫曼树

为简便输入,我们选取几个较少的元素作为范例,对其进行输入和赋值,元素为{a.b.c.d.e.f.g.h.i.j},对应的权重值为{1.2.3.4.5.6.7.8.9.0},运行

五.总结

通过这次的综合训练让我对所学的知识加深了印象,要想学好c语言要重在实践,要通过不断的上机操作才能更好地学习它尤其是对算法有更深的认识。对整个程序的设计,算法是非常重要的,设计程序的整体框架,就是利用算法进行设计,在短短的几天里,我们去图书馆或在网上查找了很多资料,学了一些以前没有接触过的函数,以此来完善程序的功能。然而很多函数虽然用的语法没错,但是不能运用自如,为自己所用。最后逐步完善各个函数的功能模块,同时算法也有了一定的认识。这些都为以后的学习和实践,提高自身能力有很大的帮助,本


数据结构哈弗曼编码译码器课程设计[1](2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:空间光学先进制造基础理论及关键技术研究 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: