哈夫曼编码-译码[问题描述]打开一篇英文文章,统计该文章中每个字符出现的次数,然后以它们作为权值,对每一个字符进行编码,编码完成后再对其编码进行译码。利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼编/译码系统。[基本要求]一个完整的系统应具有以下功能:(1)I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。(2)E:编码(Encoding)。利用已建好的哈夫曼树(如不在内存,则从文件htmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。(3)D:译码(Decoding)。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。(4)P:印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码写入文件CodePrint中。(5)T:印哈夫曼树(Tree Printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。[测试数据]新建一个.txt文件,用来存放待处理的数据,这些数据为ASCII码值的集合,而且每种字符的数量并不能相同。本实验拟设其中的数据为abbcccdddd.[实现提示](1)文件CodeFile的基类型可以设为子界型bit = 0..1。(2)用户界面可以设计为“菜单”方式:显示上述功能符号,再加上“Q”,表示运行Quit。请用户键入一个先把功能符,些功能执行完毕后再经菜单,直至某次用户先把了“E”为止。(3)在程序的一次执行过程中,第一次执行I、D或C命令之后,哈夫曼树已经在内存了,不必再读入。每次执行中不一定执行I命令,因为文件hfmTree可能早已建好。
查看答案
二叉排序树[问题描述]从键盘读入一组数据,建立二叉排序树并对其进行查找、遍历、格式化打印等有关操作。[基本要求]建立二叉排序树并对其进行查找,包括成功和不成功两种情况,并给出查找长度。[测试数据]由学生依据软件工程的测试技术自己确定。注意测试边界数据。[选作内容]实现二叉排序树的插入、删除操作。
家族关系查询系统[问题描述]建立家族关系数据库,实现对家庭成员的相关查询。[基本要求](1)建立家族关系并能存储到文件中。(2)实现家族成员的添加。(3)可以查询家族成员的双亲、祖先、兄弟、 孩子和后代等信息。[实现提示]本课程设计使用的数据结构有树状结构和队列。树状结构采用三叉链表表示,队列采用链式队列实现。[测试数据]由学生依据软件工程的测试技术自己确定。注意测试边界数据。
图遍历的演示[问题描述]很多涉及图上操作的算法都是以图的遍历操作为基础的。试写一个程序,演示无向图的遍历操作。[基本要求]以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集。[测试数据]由学生依据软件工程的测试技术自己确定。注意测试边界数据,如单个结点。[实现提示]设图的结点不超过30个,每个结点用一个编号表示(如果一个图有n个结点,则它们的编号分别为1,2,…,n)。通过输入图的全部边输入一个图,每个边为一个数对,可以对边的输入顺序作出某种限制。注意,生成树的边是有向边,端点顺序不能颠倒。[选作内容]*(1) 借助于栈类型(自己定义和实现)将深度优先遍历用非递归算法实现。(2) 以邻接多重表为存储结构建立深度优先生成树和广度优先生成树,再按凹入表或树形打印生成树。(3) 实现有向图的遍历操作。(4) 图的最小生树
校园导航[问题描述]当我们参观黄淮学院校园时,就会遇到这样一个问题:从当前所处的位置出发去校园另外一个位置,要走什么样的路线?是选择距离最近还是最省时?本课程设计实例在给校园各主要建筑的名称信息及有路线连通的建筑之间的距离(或行进时间)的基础上,利用校园导航系统计算出给定的起点到终点之间的距离最近(或行进时间最短)的行进路线。[基本要求](1)从地图文件中读取校园主要建筑信息及建筑间的距离(或行进时间)信息。(2)计算出给定的起点到终点之间距离最近(或行进时间最短)和行进路线。(3)输出该路线(包含路过哪些建筑)及其总距离(或总行进时间)。(4)若输入错误,则给出提示信息。[实现提示]本课程设计使用的数据结构是有向网络,采用邻接矩阵作为有向网络的存储结构。[测试数据]由学生依据所选校园景点地图自己确定。