置的。 【测试数据】
入库书号:35,16,18,70,5,50,22,60,13,17,12,45,25,毡,15,90,30,7然后清除:45,90,50,22,42
其余数据自行设计。由空树开始,每插入删除一个关键字后就显示B树的状态。 【实现提示】
(1)24树的查找算法是基础,入库和清除操作都要调用。难点在于删除关键字的算法,因而只要算法对2-3树适用就可以了,暂时不必追求高阶B树也适用的删除算法。
(2)每种书的记录可以用动(或静)态链式结构。借阅登记信息可以链接在相应的那种书的记录之后。
【选作内容】
(l)将一次会话过程(即程序一次运行)中的全部人机对话记入一个日志文件
\中去。
(2)增加列出某著者全部著作名的操作。思考如何提高这一操作的效率,参阅
教科书12.6.2节。
(3〉增加列出某种书状态的操作。状态信息除了包括这种书记录的全部信息
外还包括最早到期(包括已逾期)的借阅者证号,日期可用整数实现,以求简化。
(4)增加预约借书功能。
24. 多关键字排序
【问题描述】
多关键字的排序有其一定的实用范围。例如:在进行高考分数处理时,除了需对总分进行排序外,不同的专业对单科分数的要求不同,因此尚需在总分相同的情况下,按用户提出的单科分数的次序要求排出考生录取的次序。 【基本要求】
(1)假设待排序的记录数不超过10000,表中记录的关键字数不超过5,各个关键字的范围均为0至100。按用户给定的进行排序的关键字的优先关系,输出
26
排序结果。
(2)约定按LSD法进行多关键字的排序。在对各个关键字进行排序时采用两种策略:其一是利用稳定的内部排序法,其二是利用\分配\和\收集\的方法。并综合比较这两种策略。 【测试数据】
由随机数产生器生成。 【实现提示】
用5至8组数据比较不同排序策略所需时间。由于是按LSD方法进行排序,则对每个关键字均可进行整个序列的排序,但在利用通常的内部排序方法进行排序时,必须选用稳定的排序方法。借助\分配\和\收集\策略进行的排序,如同一趟\基数排序\,由于关键字的取值范围为0至100,则分配时将得到104个链表。 【选作内容】
增添按MSD策略进行排序,并和上述两种排序策略进行综合比较。
27
25手机通讯录的制作
设计目的:用〈〈数据结构〉〉中的双向链表作数据结构。编写一个手机通讯录管理系统。以把所学数据结构知识应用到实际软件开发中去。 设计内容:本系统应完成一下几方面的功能: (1). 添加信息
(2). 显示信息:它可以按按固定电话排列、按手机、联系人名字的拼音顺序排列。 (3). 查找:可以不同的关键字作为查找的依据,进行查找; (4). 编辑信息 (5). 删除信息
(6). 保存到文件:将以上信息保存到文件,以便下次运行程序时能载入此通信录 设计要求:
(1). 每条信息至包含 :姓名(NAME ),手机号,固定电话号,电子邮箱,QQ号码,城
市(CITY)邮编(EIP)几项
(2). 作为一个完整的系统,应具有友好的界面和较强的容错能力 (3). 上机能正常运行,并写出课程设计报告
26 奇数阶幻方求解
要求必须在空间复杂度为O(N)的要求下实现N阶幻方的输出。 Problem description
幻方是一种很有意思的数字矩阵,在很早著名的九宫八卦阵就与幻方有关。 幻方的定义为:
1 到 N*N 的整数填入N*N的方格中,每行和每列以及对角线的数字之和必须是相等的。 你作为八卦公司的顶级程序员,现在需要你解决一个问题,将任意奇数阶的幻方找出来。 Input
输入包括多个测试集,每行为一个正奇数N(1 <= N < 1000),0作为输入的结束且不需要处理。
28
Output
对于输入的每一个N, 输出一个它所对应的N阶幻方,如果存在多个,任意一个即可。 每个幻方为N*N的矩阵,
对于每个幻方,每行输出幻方的一行,每行中的数字之间用一个或多个空格分开。不同的幻方之间用一个空行分开。
Sample Input 1 3 0
Sample Output 1
27 算术表达式与二叉树
【问题描述】
一个表达式和一棵二叉树之间,存在着自然的对应关系。写一个程序,实现基于二叉树表示的算术表达式的操作。 【任务要求】
假设算术表达式Expression内可以含有变量(a~z)、常量(0~9)和二元运算符(+,-,*,/,^(乘幂))。实现以下操作:
1) ReadExpre(E)—以字符序列的形式输入语法正确的前缀表达式并构造表达式E。 2) WriteExpre(E)—用带括弧的中缀表达式输出表达式E。 3) Assign(V,c)—实现对变量V的赋值(V=c),变量的初值为0。 4) Value(E)—对算术表达式E求值。
5) CompoundExpr(P,E1,E2)--构造一个新的复合表达式(E1)P(E2) 【测试数据】
1) 分别输入0;a;-91;+a*bc;+*5^x2*8x;+++*3^x3*2^x2x6并输出。 2) 每当输入一个表达式后,对其中的变量赋值,然后对表达式求值。
28 内部排序算法比较
【问题描述】
在教科书中,各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机数据比较各种算法的关键字比较次数和关键字移动次数,以取得直观感受。
29
【任务要求】
1) 对以下7种常用的内部排序算法进行比较:冒泡排序、直接插入排序、简单选择排
序、希尔排序、堆排序、归并排序、快速排序。
2) 待排序表的表长不小于100;其中的数据要用伪随机数程序产生;至少要用5组不
同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)。
3) 最后要对结果作出简单分析,包括对各组数据得出结果波动大小的解释。 【测试数据】
由随机数产生器生成
29 动态查找表
【问题描述】
利用二叉排序树完成动态查找表的建立、指定关键字的查找、插入与删除指定关键字结点。
【任务要求】
算法输入:指定一组数据。
算法输出:显示二叉排序树的中序遍历结果、查找成功与否的信息、插入和删除后的中序遍历结果(排序结果)。
算法要点:二叉排序树建立方法、动态查找方法,对树进行中序遍历。 【测试数据】
自行设定,注意边界等特殊情况。
30 joseph环
【问题描述】
编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。
【任务要求】
利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。
测试数据: m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确的输出是什么? 要求:
输入数据:建立输入处理输入数据,输入m的初值,n ,输入每个人的密码,建立单循环链表。
输出形式:建立一个输出函数,将正确的输出序列 【测试数据】
自行设定,注意边界等特殊情况。
30