欢迎来到天天文库
浏览记录
ID:58182558
大小:258.00 KB
页数:26页
时间:2020-04-26
《数据结构课程设计实验报告(赫夫曼编码).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、+数据结构课程设计题目:赫夫曼编码院、系:计算机科学与工程学院学科专业:计算机科学与技术学生:高经典学号:指导教师:梁晨2010年12月22日目录1课程设计的题目-----------------------------02课程设计的目的(设计要解决的问题)----------13概要设计(函数划分、总体设计)----------------14详细设计(算法、流程图、程序)-----------------25调试结果---------------------------------326课程设计总结------------
2、-----------------337心得体会----------------------------------34二课程设计的目的<1>巩固构造赫夫曼树的算法。<2>设计实验用程序实现赫夫曼树的构造。<3>熟悉用先序、中序或后序的访问方法得到个叶子结点的赫夫曼编码。三概要设计(函数划分、总体设计)<一>总体设计(1)输入一个字符串用结构体链表存储字符串中出现的不同字符及其出现的次数。(2)定义赫夫曼数的结点结构体,把不同的字符及其在字符串中出现的次数作为叶子结点的元素及其权值,统计叶子结点的个数n,开辟可以存储2*n个结
3、点的顺序表,来赫夫曼树的各个结点,然后按照一定的规则构造赫夫曼树。(3)开辟一个可以存储叶子结点元素及指向存储其赫夫曼编码链表的指针的顺序表,然后从叶子结点开始向上访问,是左孩子的把“0”接进链表是右孩子的把“1”接进链表,直到根结点,然后把叶子结点的元素及存储其赫夫曼链表的头指针读入顺序表,直到把所有的叶子结点的元素及指向存储其赫夫曼编码链表的头指针读入顺序表,这样得到的赫夫曼编码是倒序的。(1)从存储其叶子结点及指向存储其赫夫曼编码链表头指针的顺序表表头开始顺序访问各元素,在输出其赫夫曼编码之前,把链表中的编码顺序读入到等
4、长的栈中,然后编码出栈就会得到顺序的赫夫曼编码,直到把所有的叶子结点都访问到。(2)用一个字符型的指针指向字符串的第一个字符,从存储叶子结点元素及指向存储其赫夫曼编码链表的头指针的顺序表表头开始访问顺序表中的各元素,直到找到叶子结点的元素和当前字符相等就结束访输出赫夫曼编码,回到表头,指针后移,直到输出字符串的最后一个字符的赫夫曼编码,这样就得到输入字符串的赫夫曼编码。<二>函数划分该程序有一个主函数和多个子函数,主函数完成对子函数的调用,各子函数实现相应的功能。子函数:(1)结点的开辟。(2)实现对输入字符串中出现的不同字符
5、及其出现字数的信息记录。(3)用叶子结点构造赫夫曼树。(4)获得构造的赫夫曼树中所有叶子结点的元素及其赫夫曼编码。(5)输出各叶子结点元素及其对应的赫夫曼编码。(6)输出输入的字符串的赫夫曼编码。(7)调用各子函数四详细设计(算法、流程图、程序)<一>算法<1>创建存储叶子结点元素及其权值的链表定义结构体node,其数据成员包括,字符型的元素a和整型元素b和指向node的next指针,来存储叶子结点的内容和权值。定义三个指向node的指针head、p1、p2和字符指针n、t、h,调用setnode()函数开辟一个结点让head
6、指向该结点,p1=head,让n指向输入字符串的第一个元素,当n指向的内容不是‘ ’时,如果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
7、就跳出此循环,否则,j++,h++如果i==j则开辟新的结点p2->a=*n,p2->b=r,p1->next=p2,p1=p2;n++,当把最后一个结点连入链表中,p1->next=NULL,然后把p1=head->next,当p!=NULL时输出结点中叶子结点的元素和对应的权值;最后返回head。//setnode()函数的算法:设指向node的指针p,用malloc开辟一个node结点并让p指向该结点,返回p。<2>构造赫夫曼树定义结构体node1,其数据项字符型a(存放叶子结点元素)、整型weight(存放对应权值)、
8、整型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,开辟可
此文档下载收益归作者所有