数据结构考试模拟试卷

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

13,有一个整数有序序列(4,6,8,34,45,67,89,123),若采用二分查找,则查找89要进行_________次比较。

14,一颗二叉树的叶结点分别为(4,6,7,2,5,67),则这颗树有______个度为2的结点。

15,用邻接矩阵存储图,占用存储空间数与图中顶点个数________关,与边数________关。

16,若设一个n⨯n的矩阵A的开始存储地址LOC(0, 0) 及元素所占存储单元数d已知,按行存储时其任意一个矩阵元素a[i][j]的存储地址为_________。

二,选择题(每题2分,共20分)

1,一种抽象数据类型包括数据和()两个部分。

A. 数据类型

B. 操作

C. 数据抽象

D. 类型说明

2,设循环队列中数组的下标范围是0..n-1,其头尾的下标分别为f和r,则其元素个数为()。

A、(r-f+n) % n

B、(r-f) % n+1

C、r-f+1

D、r-f

3, 由权值分别为3,8,6,2,2的叶子结点生成一棵哈夫曼树,它的带权路径长度为()

A 14

B 44

C 45

D 21

4, 在一棵高度为h的B树中,插入一个新关键码时,为搜索插入位置需读取()个结点。

A. h-1

B. h

C. h+1

D. h+2

5, 解决散列法中出现的冲突问题常采用的方法是()。

A. 数字分析法、除留余数法、平方取中法

B. 数字分析法、除留余数法、线性探查法

C. 数字分析法、线性探查法、双散列法

D. 线性探查法、双散列法、开散列法哈希表

6, 设双向循环链表中结点的结构为(data, lLink, rLink),且不带表头结点。若想在指针p所指结点之后插入指针s所指结点,则应执行下列哪一个操作?

A. p->rLink = s; s->lLink = p; p->rLink->lLink = s; s->rLink = p->rLink;

B. p->rLink = s; p->rLink->lLink = s; s->lLink = p; s->rLink = p->rLink;

C. s->lLink = p; s->rLink = p->rLink; p->rLink = s; p->rLink->lLink = s;

D. s->lLink = p; s->rLink = p->rLink; p->rLink->lLink = s; p->rLink = s;

7,设有一个n⨯n的对称矩阵A,将其上三角部分按行存放在一个一维数组B中,A[0][0]存放于B[0]中,那么第i行的对角元素A[i][i]存放于B中()处。

A. (i+3)*i/2

B. (i+1)*i/2

C. (2n-i+1)*i/2

D. (2n-i-1)*i/2

8,给定一个字符串“ababaa”,则这个串对应next函数值分别为()

A,012324 B,011123 C,012345 D,011234

9, 为了实现图的广度优先遍历,BFS算法使用的一个辅助数据结构是()。

A. 栈

B. 队列

C. 二叉树

D. 树

10, 对于如图所示的带权有向图,从顶点1到顶点5的最短路径为()。

A.1, 4, 5

B. 1, 2, 3, 5

C. 1, 4, 3, 5

D. 1, 2, 4, 3, 5

三,程序阅读题(每题6分,共24分)

1,数据结构link的定义如下,函数visit用于打印参数所指向的结点数据,请指出函数unknown的作用是什么,其中的参数h代表如下图所示的一个单链表,

输出结果为。

typedef struct LinkNode{int data;

struct LinkNode *next;

}*link;

void unknown(link h, void (*visit)(link))

{

if (h == NULL) return;

unknown(h->next, visit);

(*visit)(h);

}

2,此算法用到了一个整数堆栈,其中InitStack,Push,Pop,StackEmpty分别代表堆栈初始化、进栈、出栈和判断堆栈是否为空,请说出此算法的作用,当

输入的n和r的值分别为15和5时,写出输出结果。

void unknown()

{

Stack s;

int e;

int n,r;

InitStack(s);

cout<<"请输入变量r和n"<

again:

cin>>r>>n;

if(r>9||r<2||n<0)

{

cout<<"请重新输入变量r和n"<

goto again

}

while(n){

e=n%r;

Push(s,e);

n=n/r;

}

while(!StackEmpty(s))

{

Pop(s,e);

cout<

}

cout<

}

3,根据以下程序,如果输入的图如下,写出此程序的输出结果

struct node

{ int degree;

struct node *link;

};

typedef struct node NODE;

int toposort(NODE adjlist[ ], int num)

//有向图G采用邻接表存储结构。

//若G无回路,则输出G的顶点的一个拓扑序列并返回1,否则0。

{ int stack[100]; //存放入度为0的顶点的栈int i, top, out, k; NODE *p;

int num1=0;top=0;

for(i=0; i

if (adjlist[i].degree= =0) //入度为0顶点的编号进栈

{ stack[top]=i; top++;}

while( top>0)

{ top--; out=stack[top];

printf( “%d,”,out); num1++;

p=adjlist[out].link;

while ( p!=NULL)

{ k=p->degree;

adjlist[k]. degree - -; //顶点入度减1,if (adjlist[k]. degree = =0) //若入度减为0,则进栈{stack[top]=k;top++;} p=p->link;

}

}

if (num1

return( 0); //该有向图是否有回路

else

相关文档
最新文档