当前位置:问答库>考研试题

2017年曲阜师范大学软件学院859数据结构考研强化模拟题

  摘要

一、算法设计题

1. 设二叉排序树的各元素值均不相同,采用二叉链表作为存储结构,试分别设计递归和非递归算法按递减序打印所有左子树为空,右子树非空的结点的数据域的值。

【答案】(1)递归算法如下:

(2)非递归算法如下:

2. 试将下列递归过程改写为非递归过程。

【答案】算法如下:

3. 给出以十字链表作存储结构,建立图的算法,输入(i ,j ,v ) ,其中I , j 为顶点号,v 为权值。

【答案】算法如下:

//建立有向图的十字链表存储结构

//假定权值为整型

//建立顶点向量

//当输入i , j 、v 之一为0时,结朿算

法运行

//申请结点

//弧结点中杈值域

//算法结束

4. 请运用快速排序思想,设计递归算法实现求n (n>l)个不同元素集合中的第

【答案】算法如下:

5. 已知P 是指向单向循环链表最后一个结点的指针,试编写只包含一个循环的算法,

将线性表

改造为

【答案】算法如下:

小元素。

6. 用邻接多重表存储结构,编写FIRST-ADJ (G ,V )函数,函数返回值为第一个邻接点,若V 没有邻接点,返回零。

【答案】算法如下:

//在邻接多重表g 中,求v 的第一邻接点, 若存在,返回第一邻接点,否则返回0

//确定顶点v 在邻接多重表向量中的下标, 不考虑不存在v 的情况

//取第一个边结点

//返回第一邻接点,ivex 和jvex 中必有一个等干

i

7. 已知深度为h 的二叉树, 以一维数组应的算法。

【答案】算法如下: int Leaves (int BT[],int n)

//计算深度为h. 以一维数BT 作为其存储结构的二叉树的叶结点数,n 为数组长度{int num=0; //记叶结点数

for (i=0; i

2*i+l

BT (2*i+l】<0) num++; }//若结点无孩子,则是叶子else if

(BT[i]>0) num++; //存储在数组后一半的元素是叶结点 return num;

}//结束Leaves

作为其存储结构,试编写一算法,求该二叉

树中叶结点的个数,为简单起见,设二叉树中元素结点为非负整数,要求写出算法基本思想及相