2018年贵州师范大学机械与电气工程学院408计算机学科专业基础综合之数据结构考研核心题库
● 摘要
一、算法设计题
1. 已知顺序表中有m 个记录,表中记录不依关键字有序排列,编写算法为该顺序表建立一个有序的索引表,索引表中的每一项含记录的关键字和该记录在顺序表中的序号,要求算法的时间复杂度在最好的情况下能达到O(m)。
【答案】算法如下:
顺序表中记录个数
关键字
该关键字在顺序表中的下标
索引表的一项
关键字
记录中的其他数据
给有m 个记录的顺序表seq 建立索引表
index
监视哨
关键字放入正确位置
第i 个记录的下标
2. 编写程序,统计在输入字符串中各个不同字符出现的频度并将结果存入文件(字符串中的合法字符为A 〜Z 这26个字母和0〜9这10个数字) 。
【答案】算法如下:
( )
//统计输入字符串中数字字符和字母字符的个数
//初始化
//’#’表示输入字符串结束
'//数字字符
//字母字符
//输出数字字符的个数
("数字%d 的个数=
//求出字母字符的个数
("字母字符%c 的个数=
//算法结束。
3. 假定用两个一维数组L 【N 】和R 【N 】作为有N 个结点1,2,…,N
的二叉树的存储结构。
和
分别指示结点i 的左儿子和右儿子,
,使
) 表示i 的左(右) 儿子为空。试写一个
存放结点i 的父亲;然后再写一个判别结点u 是否
算法,由L 和R 建立一个一维数组为结点V 的后代的算法。
【答案】算法如下:
和
是含有N 个元素且指示二叉树结点i 左儿子和右儿子的一维数组
T 数组初始化
若结点i 的左子女是则结点L 的
双亲是结点
i
若结点i 的右子女是R , 则R 的
双亲是
i
判断U 是否是V 的后代
4. 对于任意的无符号的十进制整数m ,写出将其转换为十六进制整数的算法(转换仅要求能够输出正确的十六进制的整数即可) 。
【答案】算法如下:
//本算法将无符号十进制整数m 转换为十六进制整数
) ;
) ;
本算法据此建立结点i 的双亲数组T , 并判断结点U 是否是结点V 的后代
本算法的递归描述如下:
//本算法将无符号十进制整数m 转换为十六进制整数
5. (1)试分别找出满足下列条件的所有二叉树:(a)前序序列和中序序列相同:(b)前序序列和后序序列相同;(c)中序序列和后序序列相同。
(2)已知非空二叉树的结点结构为(lchild,data , rchild) ,设计算法:从右向左依次将所有叶子的数据值放到向量(假定向量的空间大于叶子的总个数) 中。
【答案】(1)满足条件的二叉树如下:
(a)若前序序列与中序序列相同,则或为空树,或为任一结点至多只有右子树的二叉树。 (b)若前序序列与后序序列相同,则或为空树,或为只有根结点的二叉树。
(c)若中序序列与后序序列相同,则或为空树,或为任一结点至多只有左子树的二叉树。 (2)算法如下:
全局变量
从右向左依次将二叉树bt 的所有叶子的数据值放到a 向量中 .
中序遍历右子树
叶结点
中序遍历左子树
二、应用题
6. 输入一个正整数序列(53,17,12,66,58,70,87,25,56,60) ,试完成下列各题。
(1)按次序构造一棵二叉排序树BS 。
(2)依此二叉排序树,如何得到一个从大到小的有序序列?