数据结构模拟试卷(8)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构模拟试卷(8)

一、填空。

1.算法的健壮性是指对于非法的输入也要能够给予正确的响应。

2.对一个线性表分别进行遍历和逆置运算,其最好的时间复杂度分别为和O(n) O(n)。

3.n个数入栈,所有可能的出栈序列共有种。

4.下面程序段的时间复杂度为O()(n>1)。

sum=1;

for(i=0; sum

5.若某二叉树有20个叶子节点,有30个节点仅有一个孩子,则该二叉树的总的节点数是20+30+19=69。

6.若以{4,5,6,7,8}作为叶子节点的权值构造哈夫曼树,则该Huffman树的根结点权值为30。

7.线索二叉树的左线索指向其前驱,右线索指向其后继。8.若含n个顶点的图形成一个环,则它的生成树可能有n 种。

9.对于具有300个记录的文件,采用分块索引查找法查找,其中用二分查找法查找索引表,用顺序查找法查找块内元素,假定每块长度均为30个元素,则平均查找长度为29/10+31/2=18.4。

10.有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当二分查找值为82的结点时,经 4 次比较后查找成功。

二、设一组记录的关键字为{4,5,7,2,1,3,6},请回答相关问题:

(1)按表中元素的顺序依次插入一棵初始为空的二叉排序树,画出插入完成后的二叉排序树,并求出在等概率情况下查找成功的平均查找长度。

查找成功的平均查找长度18/7

(2)按表中元素的顺序进行插入生成一棵AVL树,画出该树。并求出在等概率情况下查找成功的平均查找长度。

?查找成功的平均查找长度? 17/7

三、下图是一个四阶B树,请回答相关问题:

(1)B+树和B树的主要区别是什么?(2)插入关键字87,画出插入调整后树的形状。

B树:每个结点的关键字个数等于指针个数减1。

B+树:每个结点的关键字个数等于指针个数。

B+树中所有叶子结点包含了全部关键字信息,以及指向关键字记录的指针,叶子节点依关键字大小自小到大链接。非终端结点作索引,结点中含有其子树根结点的最大(最小)关键字。

四、已知记录关键字集合为(53,17,19,61,98,75,79,63,46,49),要求散列到地址区间[0,10]中,散列函数选用除留余数法(mod 11)。请回答相关问题:

(2)计算在等概率情况下查找成功时的平均查找长度。

18/10或1.8或9/5

(2)在等概率情况下查找成功时的平均查找长度

五、有7个顶点(v1,v2,v3,v4,v5,v6,v7)的有向图的邻接矩阵如右图。请回答相关问题:∞ 2 5 3 ∞∞∞∞∞ 2 ∞∞8 ∞∞∞∞ 1 3 5 ∞

(1)画出该有向图

(2)画出邻接表

(3)写出从v1出发的深度优先遍历和广度优先遍历序列(4分)

深度dfs v1 v4 v5 v7 v6 v3 v2

广度bfs v1 v4 v3 v2 v5 v6? v7

(4)将图看成AOE网,画出关键活动及相应的有向边,写出关键路径的长度

关键路径的长度为20

六、设计算法。

1.已知一棵树T用二叉树表示,其结点形式如下,试编写一算法求树T中各结点的度数。

(1)写出相应的结构定义。

(2)编写算法。

2.判断有向图是否存在回路。若存在返回1,否则返回0。

(1)写出相应的结构定义。

(2)编写算法。

七、阅读下列函数,回答相关问题:

int arrange (int a[], int 1, int h, int x)

{//1和h分别为数据区的下界和上界

int i, j, t;

i=1;j=h;

while (i

{

while (i=x ) j--;

while (i

if (i

{ t=a[j];a[j]=a[i];a[i]=t;}

}

if (a[i]

else return i-1;

}

(1)写出该函数的功能

调整整数数组a[]中的元素并返回分界值I,使得所有小于x的元素落在a[1…i]上,大于等于x的元素落在a[I+1…h]上

(2)写一个调用上述函数实现下列功能的算法:对一整型数组b[n]中的元素进行重新排列,将所有负数均调整到数组的低下标端,将所有正数均调整到数组的高下标端,若有零值,则置于两者之间,并返回数组中零元素的个数。

int f ( int b[], int n)

{ int p,q;

p=arrange(b,0,n-1,0);

q= arrange(b,p+1,n-1,1);

return q-p;

}

八、数组a存储了N个整数,请回答相关问题:

(1)请完善对数组a进行堆排序的程序。

void HeapAdjust(int a[ ], int h, int s)

{ rc=a[h];

for(j= 2*h ; j<=s; j*=2)

{if((j

if(!(rc<=a[j]))break;

a[h]=a[j] ;h=j;

}

a[h]=rc ;

}

void HeapSort(int a[ ],int n)

//对a[1],a[2],…,a[n]进行堆排序//

{for(i= n/2 ; i>0;--i)

HeapAdjust(a,i,n);

for(i= n ; i>1;--i)

{t=a[1];a[1]=a[i];a[i]=t;

HeapAdjust(a,1,I-1) ;

}

}

(2)上面程序建成的堆是大顶堆还是小顶堆?(3)对n个元素进行初始建堆的过程中,最多进行n-1 次数据比较。

(4)堆排序稳定吗?请举例说明。

不稳定

相关文档
最新文档