1、哈弗曼编码译码器专 业 班 级 :XXXX学 号 :XXXX姓 名 :XXXX指 导 教 师 :XXXX课程设计时间:XXXX计算机专业 数据结构 课程设计任务书学生姓名 XXXX 专业班级 XXXX 学号 XXXX题 目 哈弗曼编码译码器课题性质 工程设计 课题来源 XXXX指导教师 XXXX 同组姓名 XXXX 主要内容设计一个哈弗曼编码译码器,实现哈夫曼树的建立,树形输出,编码和解码。任务要求1研究哈弗曼树的数据存储方式2实现哈弗曼编码译码器的主要算法3分析算法的运行效率4具有良好的运行界面5算法具有良好的健壮性6按要求撰写课程设计报告和设计总结。参考文献 1数据结构(C 语言版) ,严
2、蔚敏、吴伟民,清华大学出版社,1997.审查意见指导教师签字: 教研室主任签字: 年 月 日 1 需求分析设计一个哈弗曼编码译码器,实现哈夫曼树的建立,树形输出,编码和解码。2 概要设计3 运行环境(软、硬件环境)1) 硬件:PC 机main建立哈夫曼树查看哈夫曼编码树形输出哈夫曼树哈夫曼文件编码哈夫曼文件解码帮助退出系统2) 操作系统:Windows 2000/XP/20033) 编译环境:Visual C+6.04 开发工具和编程语言开发工具:VISCALL c+6.0;编程语言:C 语言。5 详细设计#include #include#includetypedef struct / 结点
3、的结构 unsigned int weight; / 结点的权值unsigned int parent,lchild,rchild;HTNode,*HuffmanTree; / 动态分配数组存储哈夫曼树typedef char *HuffmanCode; / 动态分配数组存储哈夫曼编码HuffmanTree HT;HuffmanCode HC;int n=8;const char menu=“|1 建立哈夫曼树 |n“|2 查看哈夫曼编码 |n“|3 树形输出哈夫曼树 |n“|4 哈夫曼文件编码 |n“|5 哈夫曼文件解码 |n“|6 帮助 |n“|7 退出系统 |n“;const char
4、helpsabout=“|主要功能: |n“| 利用哈夫曼编码进行通信可以大大提高信道的利用率,缩短信息的传输时间,降低 |n“|传输成本。但是,这要求在发送端通过一个编码系统对待传输的数据预先编码,在接收 |n“|端将传来的数据进行译码(复原) 。对于双工信道,每端都要有一个完整的编/译码系 |n“|统。本系统即是为这样的信息收发站写一个哈夫曼码的编/译系统。 |n“| |n“| |n“;void Huffmantree();void Huffmancode();void preorder();void stringcopy();int min();void select();void de
5、code();void encode();void int_huffmantree();void print_end();void print_title();void print_menu();void print_helpabout();void print_huffmancode();void print_tree();/-先序遍历-void preorder(int root,int depth)int i;for(i=1;is2) / s1的序号大于 s2的 / 交换j=s1;s1=s2; / s1是权值最小的2个中序号较小的s2=j; / s2是权值最小的2个中序号较小的/-w 存
6、放 n 个字符的权值(均0),构造哈夫曼树 HT-void Huffmantree(int *w) int m,i,s1,s2;HuffmanTree p;if(n1):“);scanf(“%d“,w=(int*)malloc(n*sizeof(int); / 动态生成存放 n 个权值的空间printf(“请依次输入%d 个权值(整型):n“,n);for(i=0;i请选择17“);scanf(“%d“,if(selected7)printf(“错误的选择!(请输入17).按任意键继续“);getchar();getchar();switch(selected)case 1:int_huffm
7、antree();break;case 2:print_huffmancode();break;case 3:print_tree();break;case 4:encode();break;case 5:decode();break;case 6:print_helpabout();break;case 7:exit(0);break;void print_title()printf(“+=+n“);printf(“| 哈夫曼编码译码器 |n“);printf(“| Designed By Organne |n“);printf(“+=+n“);void print_end()printf(
8、“+=+n“);void main()int w8=5,29,7,8,14,23,3,11;Huffmantree(w); / 根据 w 所存的 n 个权值构造哈夫曼树 HT,Huffmancode(); /n 个哈夫曼编码存于 HCsystem(“color 17“);print_title();print_menu();6 调试分析在调试过程中出现的一些问题:1、输入语句中没有加取地址符号&2、误把取地址运算符&当作逻辑与&3、误把赋值=当恒等=4、条件语句(if)后误加分号5、循环语句中改变了循环变量6、作为输出结果的变量没有赋初值7 测试结果8 参考文献1、严蔚敏数据结构(C 语言版)
9、 清华大学出版社2、徐晓凯编著数据结构课程实验,清华大学出版 2002 年第一版3、张乃笑编著数据结构与算法电子工业出版社 2004 年 10 月课程设计总结通过这次课程设计,让我对一个程序的数据结构有更加全面更进一步的认识,根据不同的需求,采用不同的数据存储方式,不一定要用栈、二叉树等高级类型,又是用基本的一维数组,只要晕晕得当,也能达到相同的效果,甚至更佳,就如这次的课程设计,通过用 for 的多重循环,舍弃多余的循环,提高了程序的运行效率。在编写这个程序的过程中,我们复习了之前学的基本语法,哈夫曼树最小路径的求取,哈夫曼编码以及译码的应用范围,程序结构算法等一系列的问题,它使我们对数据结构改变可看法。在这次设计过程中,体会了学以致用,从中发现了学习的不足和薄弱环节,从而加以弥补。