欢迎来到天天文库
浏览记录
ID:71182857
大小:179.50 KB
页数:16页
时间:2021-11-26
《软件开发工具论文》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、学号:课程论文课程名称《软件开发工具》论文题目《对于赫夫曼编码的心得》学院计算机科学与技术学院专业软件工程班级姓名指导教师张能力2012——2013学年第1学期在大二学期开的一门数据结构课程,在大一的时候就听学长们说,数据结构这门课程很重要,学好了可以为以后的课程奠定下良好的基础,于是心中牢记着学长的这种叮咛,我抱着很认真地态度开始了这门课程的学习。(1)结点的开辟。(2)实现对输入字符串中出现的不同字符及其出现字数的信息记录。(3)用叶子结点构造赫夫曼树。(4)获得构造的赫夫曼树中所有叶子结点的元素及其赫夫曼编码。(5)输出各叶子结点元素及
2、其对应的赫夫曼编码。输出入的字符串的赫夫曼编码。(6)调用各子函数在算法的设计上,由于之前仅仅只是接触的书本上的赫夫曼树的编码,不仅显得有一些单薄,为了做好这个程序,我又在图书馆借阅了大量讲解赫夫曼编码的书籍。首先按照课本中的定义,定义结构体node,其数据成员包括,字符型的元素a和整型元素b和指向node的next指针,来存储叶子结点的内容和权值。定义三个指向node的指针head、p1、p2和字符指针n、t、h,调用setnode()函数开辟一个结点让head指向该结点,p1=head,让n指向输入字符串的第一个元素,当n指向的内容不是‘
3、 ’时,如果n指向字符串的第一个字符,则开辟一个结点,让p2指向该结点,让t指向字符串的第一个元素,当*t!=‘ ’并且*t==*n则r++(r为整型,初始值为0),把p2->a=*n,p2->b=r,p1->next=p2,p1=p2,n++,t回到字符串首;否则i++(i为整型,初始值为1)r=0,j=1;让t指向字符串第一个元素,当*t!=‘ ’,如果*t==*n,r++,t++;让h指向字符串的第一个元素,当h!=n时如果*h==*n就跳出此循环,否则,j++,h++如果i==j则开辟新
4、的结点p2->a=*n,p2->b=r,p1->next=p2,p1=p2;n++,当把最后一个结点连入链表中,p1->next=NULL,然后把p1=head->next,当p!=NULL时输出结点中叶子结点的元素和对应的权值;最后返回head。在对于设置节点的算法时候遇见了麻烦,不知道是该怎样开辟一个新的节点,用new函数对于节点使用后的释放有一定的影响,经过查资料之后,我选择了setnode算法。//setnode()函数的算法:设指向node的指针p,用malloc
5、开辟一个node结点并让p指向该结点,返回p。接下来便是重头戏----构造赫夫曼树了,定义结构体node1,其数据项字符型a(存放叶子结点元素)、整型weight(存放对应权值)、整型sign(起标记作用)、和指向左、右孩子及父母结点的指针lchild、rchild和parent。整体的构思为,定义指向node1的指针p0、p1、p2、p3、p4和整型的m、n、i、j、k1、k2,n=0、p=head->next,当p!=NULL,n++,p=p->next,开
此文档下载收益归作者所有