2018年北京市培养单位数学与系统科学研究院408计算机学科专业基础综合之数据结构考研强化五套模拟题
● 摘要
一、算法设计题
1. 给出以十字链表作存储结构,建立图的算法,输入(i, j , V) , 其中i , j 为顶点号,v 为权值。
【答案】算法如下:
建立有向图的十字链表存储结构
假定权值为整型
建立顶点向量
当输入i 、j 、v 之一为0时,结
束算法运行
申请结点
弧结点中权值域
算法结束
2. 请编写一个判别给定二叉树是否为二叉排序树的算法,设二叉树用llink —rlink 法存储。
【答案】算法如下:
判断二叉树是否是二叉排序树,本算法结束后,在调用程序中由flag 得出结论
中序遍历左子树
中序遍历的第一个结点不必判断
前驱指针指向当前结点
不是完全二叉树
中序遍历右子树
算法结束
第 2 页,共 37 页
判断二叉树t 是否是二叉排序树,若是,返回true ,否则,返回
false
若左右子树均为二叉
排序树
左子树中的最大值和右子树中
的最小值
不是二叉排序树
结束
求二叉树左子树的最大值
返回机器最小整数
求二叉树右子树的最小值
返回机器最大整数
3. 设排序二叉树中结点的结构为下述三个域构成:
Data :给出结点数据的值;left :给出本结点的左儿子结点的地址;right :给出本结点的右儿子结点的地址。设data 域为正整数,该二叉树根结点地址为T 。现给出一个正整数x 。请编写非递归程序,实现将data 域之值小于等于x 的结点全部删除掉。
【答案】算法如下:
非递归删除以r 为根的二叉排序树
栈,容量足够大,栈中元素是二叉排序树结点的指针
沿左分枝向下
出栈,沿栈顶结点的右子树向下刪除,释放被删除结点空间
在二叉排序树T 中删除所有小于等于x
的结点
根结点的值小于等于
x
删除二叉树p ,删除持续到" 根" 结点值大于x 或T 为空树为止
第 3 页,共 37 页
沿根结点左分支向下,査小干等于x 的结点
q 记P 的双亲
结点的值小于等于
x
再査原P 的右子树中小于等于x 的结点
4. 输入一个字符串,内有数字和非数字字符,如:akl23x4561796073029ef4563。将其中连续的数字作为一个整体,依次存放到一数组a 中,例如123放入a[0],456放入a[l],...... 。编程统计其共有多少个整数,并输出这些数。
【答案】算法如下:
( )
//从键盘输入字符串,连续的数字字符算作一个整数,统计其中整数的个数
//整数存储到数组a ,i 记整数个数
//从左到右读入字符串
//'#'是字符串结束标记
//是数字字符
//数初始化
//拼数
//若拼数中输入了’#’,则不再输入
//输入非数字且非#时,继续输入字符
("共有
个整数,它们是:
)
//每10个数输出在一行上
//算法结束
第 4 页,共 37 页
相关内容
相关标签