选题六:B-树与B+树及其操作
【问题描述】
学习并研究B-树与B+树,并编写演示它们操作的程序。 【任务要求】
1) B-树构建、查找、插入和删除操作程序。 2) B+树构建、查找、插入和删除操作程序。 【测试数据】
选题七:哈夫曼(Huffman)编/译码器
【问题描述】
利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼码的编/译码系统。 【任务要求】
一个完整的系统应具有以下功能: 1) I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,
建立哈夫曼树,并将它存于文件hfmTree中。 2) E:编码(Encoding)。利用以建好的哈夫曼树(如不在内存,则从文件hfmTree中
读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。 3) D:译码(Decoding)。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,
结果存入文件TextFile中。 4) P:印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代
码。同时将此字符形式的编码文件写入文件CodePrin中。 5) T:印哈夫曼树(Tree Printing)。将已在内存中的哈夫曼树以直观的方式(树或凹
入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。
【测试数据】
1) 利用教科书例6-2(严蔚敏《数据结构》P148)中的数据调试程序。 2) 用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码
和译码:“THIS PROGRAM IS MY FAVORITE”。 字符 频度 字符 频度 空格 A B 186 64 13 N 57 O P 63 15 C 22 Q 1 D 32 R 48 E 103 S 51 F 21 T 80 G 15 U 23 H 47 V 8 I 57 W 18 J 1 X 1 K 5 Y 16 L 32 Z 1 M 20 选题八:内部排序算法比较
【问题描述】
在教科书中,各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机数据比较各种算法的关键字比较次数和关键字移动次数,以取得直观感受。 【任务要求】
1) 对以下7种常用的内部排序算法进行比较:冒泡排序、直接插入排序、简单选择排
序、希尔排序、堆排序、归并排序、快速排序。
2) 待排序表的表长不小于100;其中的数据要用伪随机数程序产生;至少要用5组不
同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)。
3) 最后要对结果作出简单分析,包括对各组数据得出结果波动大小的解释。 【测试数据】
由随机数产生器生成
选题九:简单行编辑程序
【问题描述】
文本编辑器程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。限制这些操作以行为单位进行的编辑程序称为行编辑程序。
被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的作法既不经济,也不总能实现。一种解决办法是逐段地编辑。任何时刻只把待编辑文件的一段放在内存,利为活区。试按照这种方法实现一个简单的行编辑程序。设文件每行不超过320个字符,很少超过80个字符。 【任务要求】
实现以下4条基本编辑命令:
1) 行插入:格式:i<行号><回车><文本><回车>
? 将<文本>插入活区中第<行号>行之后。
2) 行删除。格式:d<行号1>[<空格><行号2>]<回车>
? 删除活区中第<行号1>(到第<行号2>行)。例如“d10”和“d10 14” 3) 活区切换。格式:n<回车>
? 将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。 4) 活区显示。模式:p<回车>
? 逐页地(每页20行)显示活区内容,每显示一页之后请用户决定是继续显示
以后各页(如果存在)。印出的每一行要前置行号和一个空格符,行号固定占4位,增量为1。
各条命令中的行号均须在活区中各行行号范围之内,只有插入命令的行号可以等于活区第一行行号减1,表示插入当前屏幕中第一行之前,否则命令参数非法。 【测试数据】
自行设定,注意测试将活区删空等特殊情况。
选题十:一元多项式计算
【问题描述】
1.能够按照指数降序排列建立并输出多项式;
2.能够完成两个多项式的相加、相减,并将结果输入;
【任务要求】
1.存储结构;
2.多项式相加的基本过程的算法(可以使用程序流程图) 3.可以提出算法的改进方法; 【测试数据】
自行设定,注意边界等特殊情况。