数据结构考试模拟试卷
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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