数据结构课程教学设计报告.doc

收藏

编号:2604413    类型:共享资源    大小:268.25KB    格式:DOC    上传时间:2020-04-23
8
金币
关 键 词:
数据结构 课程 教学 设计 报告 讲演 呈文
资源描述:
!- 数据结构课程设计报告 题目: 哈夫曼树和编码应用 学生姓名: 学 号: 班 级: 指导教师: 2011年 6 月 3日 目录 l 课程设计目的------------------------3 l 课程设计题目------------------------3 l 需求分析----------------------------4 l 设计原理----------------------------4 l 系统功能框架图----------------------5 l 流程图------------------------------6 l 设计思路----------------------------7 1. 主函数 2. 创建哈夫曼树 3. 输出哈夫曼树 4. 对哈夫曼树进行编码 5. 译码 l 程序源代码--------------------------8 l 运行结果----------------------------13 l 实验心得----------------------------21 一、课程设计目的 本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。 学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。 二、课程设计题目--哈夫曼树和编码应用 (1)从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树的存储结构; (2)利用已经建好的哈夫曼树(如不在内存,则从文件htmTree中读入),对给定的n个字符正文进行编码,并输出每个字符的编码。 (3)利用已建好的哈夫曼树,对给定的一个哈夫曼编码进行译码,判断此编码对应的字符序列,并输出结果。 三、需求分析 1、利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(既可以双向传输信息的信道),每端都需要一个完整的编/译码系统。本次设计就是为这样的信息收发站写的一个哈夫曼的编/译码器。 本实验要求: 2、本演示程序中,用户可以输入键盘中的任意字符,长度为任意长,字符输入顺序不限,且允许出现重码 3、演示程序以用户与计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,相应的输入数据(可虑去输入中的非法字符)和运算结果显示在其后。 4、在本系统中,用户可以对任意字符串进行编码/译码。 5、程序执行的命令包括:  1) 创建哈弗曼树  2) 输出哈夫曼树 3) 对哈夫曼树进行编码 4) 输出哈弗曼编码 5) 译码 6) 退出(Q) 6、测试数据:   (1)利用教科书例6-31中的数据调试程序。 (2)权值:1、3、5、7 四、设计原理 将建立哈夫曼树、实现哈弗曼编码、哈弗曼译码都定义成类成员函数,然后在主函数中调用它们。 建立哈夫曼树时,将哈夫曼树的结构定义为一个类的一维数组,类成员为权值、双亲、左孩子、右孩子、字符、编码、编码开始的位置,还有各项功能函数。用一个数组类hftree[ ]存储。 要实现哈夫曼编码,只要在所创建的哈夫曼树上进行二进制编码:往左走,编码为0,往右走编码为1,然后将从根结点到树叶的所有0、1排列起来,则得到该树叶的哈弗曼编码。用一个数组类code[ ]存储 哈夫曼译码,就是将输入的编码还原成对应的字符。 五、系统功能框架图 主函数 主菜单 Switch选择 Case1 创建哈夫曼树 Case2 输出哈夫曼树 Case3 对哈夫曼树进行编码 Case4 输出哈夫曼树编码 Case5 译码 Case6 退出程序 程序流程图: Y 输入所需要执行的功能ch ch=1 ch=2 ch=3 ch=4 ch=5 ch=6 N N N N N 内存 Y 输入所创建的哈夫曼树 读入数据 Y 内存 输出哈夫曼树数据 Y 内存 对哈夫曼树进行编码 读入数据 内存 输出哈弗曼编码数据 Y Y 内存 结束 开始 对哈夫曼树进行译码 输入需要进行译码的数据 b=3 Y N 六、设计思路: 根据题目的要求,在这个程序的设计中,我们要创建哈夫曼树,还要对哈夫曼树进行编码和译码,所以我运用了类,类的成员函数有结点的双亲结点,左、右孩子结点,权值,数据,编码和各种功能函数。然后运用所学的数据结构中的有关哈夫曼树的知识完成该程序的设计。 l 主函数 用while函数实现窗口选择界面的循环。再构建一个switch的选择,根据用户对功能的需要,进入具有不同功能的函数,每一个case选择后都以break跳出。 最后当输入字符为6时结束,while的界面循环。结束程序。 l 创建哈夫曼树 输入权值、字符之后,因为分左右孩子,所以定义整型变量p1,p2分别指向两个权值最小位置,定义整型变量s1,s2分别代表两个最小权值。利用for循环选择没有双亲结点的权值与最小权值s1进行比较,如果小于s1,则将其权值赋予s1,位置为p1;如果大于s1,小于s2,则将其权值赋予s2,位置为p2;如果大于s2,则重新选择。 当所有的位置确定之后,将左右孩子依次进行合并。哈夫曼树创建成功。 l 输出哈夫曼树 利用一个for循环,将所创建的哈夫曼树的所有权值、双亲、左孩子、右孩子全部输出就输出了一个哈夫曼树。 l 对哈夫曼树进行编码 在所创建的哈夫曼树上进行二进制编码:是其双亲的左孩子,编码为0;是其双亲的右孩子,编码为1;然后将从根结点到树叶的所有0、1排列起来,则得到该树叶的哈弗曼编码。 l 输出哈弗曼编码 利用一个for循环,将所创建的哈夫曼树的字符、权值所对应的哈弗曼二进制编码输出。 l 译码 用while循环输入二进制编码,以3结束。找到二进制编码所对应的结点在哈夫曼树中对应的位置,输出该位置的字符。这就是二进制编码的译码。 七、程序源代码 #include #include #include #include #include #include class tree {public: float weight; //权值 int parent,lchild,rchild; //双亲结点,左、右孩子结点 int bit[99]; //编码的存放位置 int start; //编码开始的位置 char data; //字符内容 void creathuffmantree(tree hftree[],int m,int n); void printhuffmantree(tree hftree[],int m); void huffmancode(tree hftree[],tree code[],int n); void printhuffmancode(tree hftree[],tree code[],int n); void trancode(tree hftere[],tree code[],int m); }; void tree::creathuffmantree(tree hftree[],int m,int n)//创建哈夫曼树 { int i,j,p1,p2; float s1,s2; for(i=1;i<=m;i++)//初始化 { hftree[i].parent=0; hftree[i].lchild=0; hftree[i].rchild=0; hftree[i].weight=0; } cout<<"请输入"<>hftree[i].weight; cout<<"请输入"<>hftree[i].data ; for(i=n+1;i<=m;i++) { p1=p2=0; //p1、p2分别指向两个权值最小的位置 s1=s2=32767; //代表两个最小权值 for(j=1;j<=i-1;j++) if(hftree[j].parent==0) if(hftree[j].weight>b; while(b!=3) { if(b==0) i=hftree[i].lchild; else i=hftree[i].rchild; if(hftree[i].lchild==0) { cout<<"译码为:"<>b; } cout<<"返回!"<>cn; cout<>k; n=k; m=2*n-1; t.creathuffmantree(hftree, m, n); break; //生成huffman树 case 2:t.printhuffmantree(hftree,m);break; case 3:t.huffmancode(hftree,code,n);break; case 4:t.printhuffmancode(hftree,code,n);break; case 5:t.trancode(hftree,code,m);break; } } cout<
展开阅读全文
提示  淘文阁 - 分享文档赚钱的网站所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:数据结构课程教学设计报告.doc
链接地址:https://www.taowenge.com/p-2604413.html
关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

收起
展开