考研计算机-数据结构模拟试题

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

计算机数据结构模拟试题(一)

一.单项选择题:1~40题,每小题2分共80分。在每小题给出的四个选项中,请选出一项最符合题目要求的。

1.在一个单链表中,已知指针p指向其中的某个结点,若在该结点前插入一个由指针s 指向的结点,则需执行()。

A.s->next = p->next; p->next = s; B.p->next = s;

s->next = p;

C.r = p->next; p->next = s; s->next = r; D.仅靠已知条件无法实现

2.设顺序表长度为n,从表中删除元素的概率相等。则在平均情况下,从表中删除一个元素需要移动的元素个数是()。

A.(n−1)/2 B.n/2 C.n(n− 1)/2 D.n(n + 1)/2

3.在一个具有n个单元的顺序栈中,假定以高端(即第n−1单元)作为栈底,以top 为栈顶指针,则当作出栈运算时,top变化为()。

A.top不变B.top = 0 C.top-- D.top ++

4.若一个栈以向量V[n]存储,设栈空时,栈顶指针top为n−1,则下面x进栈的正确操作是()。

A.top = top + 1;V[top] = x B.V[top] = x;top = top + 1

C.top = top − 1;V[top] = x D.V[top] = x;top = top − 1

5.经过以下栈运算后,x的值是()。

InitStack(s); Push(s, a); Push(s, b); Pop(s, x); Push(s, c); Pop(s, x);

GetTop(s, x);

A. a B.b C.c D.d

6.若一棵二叉树有126个节点,在第7层(根结点在第1层)的结点个数至多有()。

A.32 B.64 C.63 D.不存在第7层

7.具有n个顶点的有向图的边最多有()。

A.n B.n(n−1) C.n(n+1) D.n2

8.设连通图G的顶点数为n,则G的生成树的边数为()。

A.n B.n−1 C.2n D.2n−1

9.散列查找中k个关键字具有同一哈希值,若用线性探测法将这k个关键字对应的记录存入哈希表中,至少要进行()次探测。

A.k B.k + 1 C.k(k + 1)/2

D.1 + k(k + 1)/2

10.一组记录的关键字为(45,80,55,40,42,85),则利用堆排序的方法建立的初始

堆为()。

A.(80,45,55,40,42,85) B.(85,80,55,40,42,45)

C.(85,80,55,45,42,40) D.(85,55,80,42,45,40)

二、综合应用题:41-47小题,共70分

1.已知顺序表中有m个记录,表中记录不依关键字有序。编写算法为该顺序表建立一个有序的索引表,索引表中每一项应含有记录关键字和记录在顺序表中的序号,要求算法的时间复杂度在最好的情况下能达到O(m)。

2. 在二叉链表的每个结点中添加一个域int depth,表示以该结点为根的子树的深度,即:

typedef struct BiTNode { // 结点结构

TElemType data;

struct BiTNode *lchild, *rchild; // 左右孩子指针

int depth; // 以该结点为根的子树的深度

} BiTNode, * BiTree;

(1)试编写一递归函数BiTreeDepth ( BiTree T ),计算二叉树T中每个结点的depth 值,函数的返回值为树T的深度。

(2)在(1)的基础上(即已求出二叉树中每个结点的depth值),编写一递归函数BiTreeBalance ( BiTree T ),判断二叉排序树T是否为平衡二叉树,如果是平衡二叉树,则函数的返回值为真。

计算机数据结构模拟试题(一)参考答案

答案仅供参考

一、单项选择题:1~40题,每小题2分共80分。在每小题给出的四个选项中,请选出一项最符合题目要求的。

1.D

2.A

3.C

4.D

5.A

6.C

7.B

8.B

9.C 10.B

二、综合应用题:41-47小题,共70分

1.解答(参考算法):

索引表的类型定义如下:

typedef struct {

KeyType key; // 关键字

int id; // 对应记录在顺序表中的序号

}IndexType,IdxTable[MAXSIZE + 1];

顺序表类型定义如下:

typedef struct {

KeyType key;

} RedType ;

typedef struct{

RedType r[MAXSIZE + 1]; // r[0]闲置或用作哨兵单元

int length; // 顺序表长度

} SqList;

算法:

void createIdx( SqList L, IdxTable Idx )

{// 顺序表L中有m个记录,本算法为该顺序表建立一个有序的索引表,索引表中每一项包含记录

//的关键字和记录在顺序表中的序号两个数据项

Idx[1].key = L.r[1].key; Idx[1].id = 1;

for ( i=2; i<=m; i++ )

{ j = i-1;

while(j>0)&&(Idx[j].key> L.r[i].key)

{ Idx[j+1].key = Idx[j].key;

Idx[j+1].id = Idx[j].id;

j--;

}

Idx[j+1].key = L.r[i].key;

Idx[j+1].id = i;

}

}

试题分析:本题考查考生是否掌握直接插入排序算法的应用。算法的核心思想是借助于直接插入排序,将顺序表中各记录的关键字以及记录在顺序表的序号插入到索引表中。

2.(1)递归函数BiTreeDepth(BiTree T)如下。

int BiTreeDepth(BiTree T)

{ int ldepth, rdepth;

if ( ! T ) return 0;

ldepth = BiTreeDepth ( T->lchild );

rdepth = BiTreeDepth ( T->rchild );

if ( ldepth >= rdepth )

T->depth = ldepth+1;

else

T->depth = rdepth+1;

return T->depth;

}

(2)递归函数BiTreeBalance ( BiTree T )程序如下。

Status BiTreeBalance(BiTree T)

{ int ldepth, rdepth;

if ( T == NULL ) return TRUE;

if ( T->lchild )

ldepth = T->lchild->depth;

else

ldepth = 0;

if ( T->rchild )

相关文档
最新文档