哈夫曼树课程设计报告.doc
《哈夫曼树课程设计报告.doc》由会员分享,可在线阅读,更多相关《哈夫曼树课程设计报告.doc(18页珍藏版)》请在三一办公上搜索。
1、闽江学院课程设计说明书题目: 哈夫曼编译码器 院 系: 计算机科学系 专业班级: 10软件工程 学 号: 学生姓名: 指导教师: 2011年 12 月 30 日 课程设计需求分析报告一、分析问题和确定解决方案1.分析问题利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统,为这样的信息收发站写一个哈夫曼的编/译码系统。2.确定解决方案设计建立带权的哈夫曼树,确定哈夫曼树的类与成员函数,以及各函数之间的调
2、用关系,采用动态数组的存储结构存储所需要的数据,通过不同的函数来实现编码,译码以及打印二进制编码、哈夫曼树,把不同的数据存入不同的txt文件中,通过主函数调用来实现功能检测。3.输入的形式和输入值的范围手动或者从文本中读入数据的形式初始化哈夫曼树,从键盘中或者文件中读入数据,以字母A-Z代表结点,以自然数代表权值,字符串提示使用者所要执行的操作。4.输出的形式在显示器界面上或者以文本的形式来实现程序调试的输出。5.程序所能达到的功能(1)初始化。手动输入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件WritehfmTree中,输出哈夫曼树及各字符对应的编码存于Writehf
3、mCode;从文本中读入字符,建立哈夫曼树存于ReadhfmTree, 输出哈夫曼树及各字符对应的编码存于ReadhfmCode.(2)编码。手动输入一串大写英文字符,该字符存于WriteToBeTron中,对字符进行编码并将它存于WriteCodeFile中;从文件中读取字符编码并存于ReadCodeFile中。(3)译码。先初始化默认哈夫曼树,手动输入二进制代码进行译码存于WriteTextFile中;从文件中读取二进制代码进行译码存于ReadTextFile中。(4)印代码文件。将文件ReadCodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的代码码写入文件Code
4、Print中。(5)印哈夫曼树。将初始化的哈夫曼树以直观的方式显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。各个功能数据输出存储位置(如表1所示)表1:各个功能数据输出存储位置表功能字母二进制码初始化WritehfmTree(手动)WritehfmCode(手动)ReadhfmTree(文本读入)ReadhfmCode(文本读入)hfmTree(默认文本读入)hfmCode(默认文本读入)编码WriteToBeTron(手动)WriteCodeFile(手动)ReadCodeFile(文本读入)译码WriteTextFile(手动)WriteCodeFile(手动)Re
5、adTextFile(文本读入)印编码代码CodePrint印哈夫曼树TreePrint6.测试数据(1)正确的输入:1输入主菜单项中的英文字母I(i),E(e),D(d),P(p),Q(q)输出结果:进入所选的功能界面2输入子菜单项中的数字1,2,3,(4) 输出结果:执行所选的功能(2)含有错误的输入:1输入除了主菜单项中的英文字母I(i),E(e),D(d),P(p),Q(q) 输出结果: 2输入除了子菜单项中的数字1,2,3,(4) 输出结果:7.程序说明(1)程序中数据类型的定义:用到三组结构体,分别是哈夫曼树的动态数组存储结构*HuffmanTree,哈夫曼编码表的存储结构Huff
6、manCode,字符结点的动态数组存储结构wElem以及哈夫曼树类定义class Huffman。(2)主程序的流程图:用户从主菜单中选择所要进行的操作,如果输入选项错误则提示重新输入选项,否则进入选中的操作项(如图1所示)。 图1:主程序流程图(3)各程序模块之间的层次(调用)关系:主函数main()调用初始化,编码,译码,打印二进制编码,打印哈夫曼树这五个子函数;进入初始化功能后调用手动输入,文本读入,默认文本这三个函数;进入编码功能后调用手动编码,文本读入编码这两个函数;进入译码功能后调用手动译码,文本读入译码这两个函数(如图2所示)。 图2::各程序模块之间的层次(调用)关系(4)默认
7、的哈夫曼树:空格以及字母AZ频度分别为186,64,13,22,32,103,21,15,47,57,1,5,32,20,57,63,15,1,48,51,80,23,8,18,1,16,1建立一棵默认的哈夫曼树(如图3所示)。 图3:默认的哈夫曼树二、详细设计1、哈夫曼树存储及类的定义:#include #include #include #include #include typedef struct /哈夫曼树的存储结构int weight;/权值char HTch;/字符int parent,lchild,rchild;/双亲,左孩子,右孩子HTNode,*HuffmanTree; /
8、动态数组存储哈夫曼树typedef struct /哈夫曼编码表的存储结构char ch; /字符char* hufCh; /二进制码HuffmanCode; /动态数组存储哈夫曼编码表typedef struct /字符结点char ch; /字符int wt; /字符权值wElem; /动态分配数组存储读入字符与权值class Huffmanpublic:Huffman();/构造函数Huffman();/析构函数void Initialization(HuffmanTree &HT,HuffmanCode *HC,int &n);/初始化,手动void Initialization(Hu
9、ffmanTree &HT,HuffmanCode *HC,int &n,int v);/初始化,标准文件void Initialization(HuffmanTree &HT,HuffmanCode *HC,char*InitFile,int &n);/初始化,统计void EnCoding(HuffmanCode *HC,int hufnum); /手动编码void EnCoding(HuffmanCode *HC,char*EnCodeFile); /文件读入编码void DeCoding(HuffmanTree HT,HuffmanCode *HC,int n);/手动译码void D
10、eCoding(HuffmanTree HT,HuffmanCode *HC,char*DeCodeFile,int n);/文件读入译码void Print(char *);/打印二进制编码void Treeprinting( HTNode T,HuffmanTree HT,int n );/打印哈夫曼树;2、哈夫曼树的基本操作:/手动输入字符与权值并初始化void Huffman:Initialization(HuffmanTree &HT,HuffmanCode *HC,int &n)/哈夫曼树对象,编码对象,字符数/从文件读入标准哈夫曼树并初始化void Huffman:Initial
11、ization(HuffmanTree &HT,HuffmanCode *HC,int &n,int v)/哈夫曼树对象,编码对象,字符数,区分功能参数/从文件中统计字符与权值,构造哈弗曼树void Huffman:Initialization(HuffmanTree &HT,HuffmanCode *HC,char*InitFile,int &n)/哈夫曼树对象,编码对象,文件名,字符数/编码函数,对用户输入的文件的正文进行编码,然后将结果存入文件WriteCodeFile.txt中void Huffman:EnCoding(HuffmanCode *HC,int hufnum)/编码数组对
12、象,字符数/编码函数,从文件读取void Huffman:EnCoding(HuffmanCode *HC,char*EnCodeFile)/编码数组对象,文件名/译码函数,对文件CodeFile中的代码进行译码,结果存入文件ReadTextFile.txt中void Huffman:DeCoding(HuffmanTree HT,HuffmanCode *HC,char*DeCodeFile,int n)/哈夫曼树对象,编码对象,文件名,字符数/译码函数,手动输入void Huffman:DeCoding(HuffmanTree HT,HuffmanCode *HC,int n)/哈夫曼树对
13、象,编码对象,字符数/打印函数,将文件CodePrint.txt中的内容以每行个代码显示在屏幕上void Huffman:Print(char* cfileName) /文件名/打印哈夫曼树void coprint(HuffmanTree start,HuffmanTree HT) /哈夫曼树对象,哈夫曼树对象其中部分操作的伪代码如下:(1)从文件读入标准哈夫曼树并初始化void Huffman:Initialization(HuffmanTree &HT,HuffmanCode *HC,int &n,int v)/哈夫曼树对象,编码对象,字符数,区分功能参数定义一个动态数组存放空格和26个英
14、文字母,把字符串 ABCDEFGHIJKLMNOPQRSTUVWXYZ读入文件CharFile.txtwhile(charRead.get(inbuf)wj.ch=inbuf;wj.wt=cwj;j+;/w存放n字符及其权值(从0号单元开始),构造哈夫曼树HT,并求出n个字符的哈夫曼编码HC.int i,m,ww=0;/n:字符数 m:树结点数 int s1,s2;HuffmanTree p;/定义指针变量pif(n=1) return;/小于2个字符,结束m=2*n-1;/n个叶子,2*n-1个结点HT=new HTNode(m+1)*sizeof(HTNode);HT0.parent=-1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈夫曼树 课程设计 报告
链接地址:https://www.31ppt.com/p-2396535.html