2011 数据结构

1.设n是描述问题规模的非负整数,下面程序片段的时间复杂度是————。

x = 2;

while ( x < n/2 )

x = 2*x;

A.O(log2n) B.O(n) C.O(n log2n) D.O(n2)

解:

   最后的次数是: 2^(k+1)</n/2 结束

=>2^(k+2)=n

=>k=log2n-2


2.元素a, b, c, d, e 依次进入初始为空的栈中,若元素进栈后可停留、可出栈,直到所有元素都出栈,则在所有可能的出栈序列中,以元素d 开头的序列个数是————。

A.3 B.4 C.5 D.6

解:首先: e>d => e 位置是随意的

    d 限定,(a,b,c)顺序,若是全排列,必有 3*2*1=6 但a,b,c 也必有顺序

=》只要把e 插入到a,b,c,之间即可

=》 d xa xb xc  xe

d前面的元素必连续入栈

=>四种


3.已知循环队列存储在一维数组A[0..n-1] 中,且队列非空时front 和rear 分别指向队头元素和队尾元素。若初始时队列为空,且要求第1个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是————。

A.0, 0 B.0, n-1 C.n-1, 0 D.n-1, n-1

解答: 循环队列:

front++ 进入=>front[0];

rear 初始化在 a[n-1] 


4.若一棵完全二叉树有768 个结点,则该二叉树中叶结点的个数是————。

A.257 B.258 C.384 D.385

解:

 512<768<1024

=》deep(tree)=10

deep  10:768-(2^9-1)=257;

deep 9:127

sum=384

//最简答的方法是:特例:

推知 :n0=n0/2=768/2=384



5.若一棵二叉树的前序遍历序列和后序遍历序列分别为1, 2, 3, 4 和4, 3, 2, 1,则该二叉树的中序遍历序列不会是————。

A.1, 2, 3, 4 B.2, 3, 4, 1 C.3, 2, 4, 1 D.4, 3, 2, 1

解:

前序:根左右:

后序:左右根 。

A

AB,D 都不对



6.已知一棵有2011 个结点的树,其叶结点个数为116,该树对应的二叉树中无右孩子的结点个数是————。

A.115 B.116 C.1895 D.1896

解:

使用特殊方法求解:

当底层有116个节点是,转化为对应的二叉树是115:



7.对于下列关键字序列,不.可能构成某二叉排序树中一条查找路径的序列是————。

A.95, 22, 91, 24, 94, 71 B.92, 20, 91, 34, 88, 35

C.21, 89, 77, 29, 36, 38 D.12, 25, 71, 68, 33, 34

解:依次半分大小有序:子节点数值小于父节点数值

A


8.下列关于图的叙述中,正确的是————。

I. 回路是简单路径

II. 存储稀疏图,用邻接矩阵比邻接表更省空间

III.若有向图中存在拓扑序列,则该图不存在回路

A.仅II B.仅I、II C.仅III D.仅I、III

解答:

回路=》/ 简单路径:

存储

III=》拓扑必无环行

B 不对;


9.为提高散列(Hash)表的查找效率,可以采取的正确措施是

I. 增大装填(载)因子

II. 设计冲突(碰撞)少的散列函数

III.处理冲突(碰撞)时避免产生聚集(堆积)现象

A.仅I B.仅II C.仅I、II D.仅II、III

解:

I,假设无穷大,则是把集合元素增大,效率更低

II:可以,冲突少

III:聚集现象不可避免

B。

10.为实现快速排序算法,待排序序列宜采用的存储方式是————。

A.顺序存储 B.散列存储 C.链式存储 D.索引存储

解:快速排序 =>插入排序

是“选定即有序”

A

11.已知序列25, 13, 10, 12, 9 是大根堆,在序列尾部插入新元素18,将其再调整为大根堆,调整过程中元素之间进行的比较次数是————。

A.1     B.   2  C.    4 D .5

解:

      25 10 :最后加一个18: 显然在组成的该线性组中移动 2次

 

41.(8分)已知有6个节点(顶点编号0-5)的有向的带权图G,邻接矩阵A为上三角矩阵,按行为主保存在如下的一位数组中:

image

要求:
1.写出图G的邻接矩阵;

2.画出有向带权图G

3.求图G的关键路径,并计算该关键路径的长度。

解:

1.邻接矩阵:

          0      1      2        3        4    5

  0     0     

1              0

2                       0

3                                0

4                                        0

5                                              0

因此,若是行优先存储则是:

5+4+3+2+1=15 =》共15

得出每行的数据是:

4,6,x,x,x

5,x,x,x

4,3,x

x,3

3

 

所以按照对应的数据层次关系得到:

A的矩阵是:

         0 4 6 x x x

A=     x 0 5  x x x

         x x 0 4 3 x

         x x  x 0 x 3

         x x  x x x 0

 

2.根据的第一步的所得矩阵:做出权图是:

//0-1>1= 4  0->2=6

//1->2=5  

//2->3=4 //2->4=3

//3->5=3

//4->5=3

image

 

image

3)找寻关键路径之和是:对应的关键路径从开始到结束最迟的时间:

因此可以: 4+5+4+3=16

 

42.(15 分)一个长度为L(L≥1)的升序序列S,处在第L/2 个位置的数称为S 的中位数。例如,若序列S1=(11, 13, 15, 17, 19),则S1 的中位数是15。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2, 4, 6, 8, 20),则S1 和S2 的中位数是11。现有两个等长升序序列A 和B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列A 和B 的中位数。要求:

(1)给出算法的基本设计思。

  解答:如果归并后排序,中位数。是O(n).是线性查找;空间复杂度:O(n):

  高效方法:

  1)使用a=b;  则 a或b 即为所求的中位数。

  2)假设 a<b;

…a…b…的序列出现。则中位数比出现在a,b 之间。作如下处理:

舍弃A序列的较小的一半,同时舍弃在B的序列中的较大的一半。

(2)根据设计思想,采用C 或C++或JAVA 语言描述算法,关键之处给出注释。

(3)说明你所设计算法的时间复杂度和空间复杂度。

转载于:https://my.oschina.net/u/578921/blog/174126

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值