工学数据结构02331历年试题07011110.docx
《工学数据结构02331历年试题07011110.docx》由会员分享,可在线阅读,更多相关《工学数据结构02331历年试题07011110.docx(85页珍藏版)》请在冰豆网上搜索。
工学数据结构02331历年试题07011110
全国2007年1月高等教育自学考试
数据结构试题
课程代码:
02331
一、单项选择题(本大题共15小题,每小题2分,共30分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1.抽象数据类型的三个组成部分分别为( )
A.数据对象、数据关系和基本操作
B.数据元素、逻辑结构和存储结构
C.数据项、数据元素和数据类型
D.数据元素、数据结构和数据类型
2.若算法中语句的最大频度为T(n)=2006n+6nlogn+29log2n,则其时间复杂度为( )
A.O(logn)B.O(n)
C.O(nlogn)D.O(log2n)
3.若线性表的插入和删除操作频繁地在表头或表尾位置进行,则更适宜采用的存储结构为
( )
A.无头结点的双向链表B.带尾指针的循环链表
C.无头结点的单链表D.带头指针的循环链表
4.上溢现象通常出现在( )
A.顺序栈的入栈操作过程中B.顺序栈的出栈操作过程中
C.链栈的入栈操作过程中D.链栈的出栈操作过程中
5.已知串s=″aabacbabcaccab″,串t1=″abc″,串t2=″cba″,函数index(s,t)的返回值为串t在串s中首次出现的位置,则能求得串″abcacba″的操作序列为( )
A.substr(s1,s,6,index(s,t1));substr(s2,s,index(s,t1),1);strcat(s1,s2);
B.substr(s1,s,7,index(s,t1));substr(s2,s,index(s,t1),1);strcat(s2,s1);
C.substr(s1,s,6,index(s,t2));substr(s2,s,index(s,t2),3);strcat(s1,s2);
D.substr(s1,s,6,index(s,t2));substr(s2,s,index(s,t2),3);strcat(s2,s1);
6.对广义表L=((a,b),((c,d),(e,f)))执行head(tail(head(tail(L))))操作的结果是( )
A.dB.e
C.(e)D.(e,f)
7.已知一棵完全二叉树有64个叶子结点,则该树可能达到的最大深度为( )
A.7B.8
C.9D.10
8.若一棵二叉树有11个叶子结点,则该二叉树中度为2的结点个数是( )
A.10B.11
C.12D.不确定的
9.对于有向图,其邻接矩阵表示相比邻接表表示更易于进行的操作为( )
A.求一个顶点的邻接点B.求一个顶点的度
C.深度优先遍历D.广度优先遍历
10.若用邻接矩阵表示带权有向图,则顶点i的入度等于矩阵中( )
A.第i行非∞元素之和B.第i列非∞元素之和
C.第i行非∞元素个数D.第i列非∞元素个数
11.对关键字序列(5,1,4,3,7,2,8,6)进行快速排序时,以第一个元素5为基准的一次划分的结果为( )
A.(1,2,3,4,5,6,7,8)B.(1,4,3,2,5,7,8,6)
C.(2,1,4,3,5,7,8,6)D.(8,7,6,5,4,3,2,1)
12.下列二叉树中,不平衡的二叉树是( )
13.下列序列中,不构成堆的是( )
A.(1,2,5,3,4,6,7,8,9,10)
B.(10,5,8,4,2,6,7,1,3)
C.(10,9,8,7,3,5,4,6,2)
D.(1,2,3,4,10,9,8,7,6,5)
14.主关键字能唯一标识( )
A.一个记录B.一组记录
C.一个类型D.一个文件
15.稀疏索引是指在文件的索引表中( )
A.为每个字段设一个索引项B.为每个记录设一个索引项
C.为每组字段设一个索引项D.为每组记录设一个索引项
二、填空题(本大题共10小题,每小题2分,共20分)
请在每小题的空格中填上正确答案。
错填、不填均无分。
16.链式存储结构的特点是借助_______来表示数据元素之间的逻辑关系。
17.假设带头结点的非空单循环链表中仅设尾指针L,则在第1个结点之前插入指针s所指结点的语句依次是_______;_______。
18.无表头结点的链队列Q为空的条件是_______。
19.不含任何字符的串称为_______。
20.假设按行优先顺序将一个20阶的三对角矩阵A压缩存储在一维数组Q中,其中Q[0]存放矩阵的第1个元素a1,1,那么矩阵元素a3,4在Q中的存储位置k=_______。
21.前序序列和中序序列不相同的二叉树的特征是_______。
22.在含有n个顶点的连通图中,任意两个不同顶点之间的简单路径的最大长度为_______。
23.用_______排序方法对关键字序列(20,25,12,47,15,83,30,76)进行排序时,前三趟排序的结果为:
20,12,25,15,47,30,76,83
12,20,15,25,30,47,76,83
12,15,20,25,30,47,76,83
24.哈希表常用的两类解决冲突的方法是_______和_______。
25.倒排文件和多重表文件的主要区别在于_______的结构不同。
三、解答题(本大题共4小题,每小题5分,共20分)
26.已知主串为″ccgcgccgcgcbcb″,模式串为″cgcgcb″。
下表所列为按照朴素的串匹配算法进行的前两趟匹配。
请继续完成余下各趟匹配,直至结束。
27.已知带权图G如图所示,画出图G的一棵最小生成树。
28.对于直接插入排序,希尔排序,冒泡排序,快速排序,直接选择排序,堆排序和归并排序等排序方法,分别写出:
(1)平均时间复杂度低于O(n2)的排序方法;
(2)所需辅助空间最多的排序方法;
(3)最好情况和最坏情况下的时间复杂度相同的排序方法。
(1)
(2)
(3)
29.已知一棵线索化的二叉排序树如图所示。
(1)说明该树的线索化是基于何种遍历次序的;
(2)在该树中插入元素值为53的结点并修改相应线索,画出修改之后的树。
(1)
(2)
四、算法阅读题(本大题共4小题,每小题5分,共20分)
30.假设线性表采用顺序存储结构,表中元素值为整型。
阅读算法f30,并回答下列问题:
(1)设顺序表L=(3,7,3,2,1,1,8,7,3),写出执行算法f30后的L;
(2)简述算法f30的功能。
voidf30(SeqList*L)
{inti,j,k;
k=0;
for(i=0;ilength;i++)
{for(j=0;jdata[i]!
=L->data[j];j++);
if(j==k)
{if(k!
=i)L->data[k]=L->data[i];
k++;
}
}
L->length=k;
}
(1)
(2)
31.阅读算法f31,并回答下列问题:
(1)设队列Q=(1,3,5,2,4,6)。
写出执行算法f31后的队列Q;
(2)简述算法f31的功能。
voidf31(Queue*Q){
DataTypee;
if(!
QueueEmpty(Q)){
e=DeQueue(Q);
f31(Q);
EnQueue(Q,e);
}
}
(1)
(2)
32.已知树的存储结构为孩子兄弟链表,其类型定义如下:
typedefstructCSTNode{
chardata;
structCSTNodeleftmostchild,*rightsibling;
}CSTNode,*CSTree;
阅读函数f32,并回答下列问题:
(1)对于如图所示树,写出函数调用f32(T)的返回值;
(2)简述树T非空时函数f32返回值的含义。
intf32(CSTreeT){
intc;
CSTreep;
if(!
T->leftmostchild)return1;
else{
c=0;
for(p=T->leftmostchild;p;p=p->rightsibling)
c+=f32(p);
returnc;
}
}
(1)
(2)
33.已知数组R[1..p-1]中的元素序列为一个大根堆,函数Adjust(R,p)将R[1..p]重新调整为一个大根堆。
(1)在函数Adjust的空缺处填入适当内容,使其成为一个完整的函数;
(2)简述函数f33(R,n)的功能。
voidAdjust(SeqListR,intp)
{inti,j;
RecTypetemp=R[p];
i=p;
j=i/2;
while(j>=1&&R[j].key{R[i]=R[j];
i=j;
①;
}
R[i]=②;
}
voidf33(SeqListR,intn)
{intk;
for(k=2;k<=n;k++)
Adjust(R,k);
}
(1)①
②
(2)
五、算法设计题(本大题10分)
34.已知有向图的邻接表表示的形式描述如下:
#defineMaxNum50//图的最大顶点数
typedefstructArcNode{
intadjvex;//邻接点域
structArcNode*nextArc;//链域
}ArcNode;//弧结点类型
typedefstruct{
charvertex;//顶点域
ArcNode*firstArc;//弧表头指针
}VertexNode;//顶点表结点类型
typedefstruct{
VertexNodeadjList[MaxNum];//邻接表
intn,e;//图中当前的顶点数和边数
}ALGraph;//邻接表类型
按以下函数原型编写算法,求有向图G中第i顶点的度,并写出算法的时间复杂度。
intf34(ALGraph*G,inti);
全国2007年10月高等教育自学考试
数据结构试题
课程代码:
02331
一、单项选择题(本大题共15小题,每小题2分,共30分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1.下面程序段的时间复杂度为()
s=0;
for(i=1;ifor(j=1;j
s+=i*j;
A.O
(1)B.O(logn)
C.O(n)D.O(n2)
2.已知指针p和q分别指向某单链表中第一个结点和最后一个结点。
假设指针s指向
另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为()
A.q->next=s->next;s->next=p;B.s->next=p;q->next=s->next;
C.p->next=s->next;s->next=q;D.s->next=q;p->next=s->next;
3.在计算机内实现递归算法时所需的辅助数据结构是()
A.栈B.队列
C.树D.图
4.假设以数组A[m]存放循环队列的元素。
已知队列的长度为length,指针rear指向队
尾元素的下一个存储位置,则队头元素所在的存储位置为()
A.(rear-length+m+1)%mB.(rear-length+m)%m
C.(rear-length+m-1)%mD.(rear-length)%m
5.通常将链串的结点大小设置为大于1是为了()
A.提高串匹配效率B.提高存储密度
C.便于插入操作D.便于删除操作
6.带行表的三元组表是稀疏矩阵的一种()
A.顺序存储结构B.链式存储结构
C.索引存储结构D.散列存储结构
7.表头和表尾均为空表的广义表是()
A.()B.(())
C.((()))D.((),())
8.用二叉链表表示具有n个结点的二叉树时,值为空的指针域的个数为()
A.n-1B.n
C.n+lD.2n
9.为便于判别有向图中是否存在回路,可借助于()
A.广度优先搜索算法B.最小生成树算法
C.最短路径算法D.拓扑排序算法
10.连通网的最小生成树是其所有生成树中()
A.顶点集最小的生成树B.边集最小的生成树
C.顶点权值之和最小的生成树D.边的权值之和最小的生成树
11.按排序过程中依据的原则分类,快速排序属于()
A.插入类的排序方法B.选择类的排序方法
C.交换类的排序方法D.归并类的排序方法
12.下列关键字序列中,构成小根堆的是()
A.{84,46,62,41,28,58,15,37}
B.{84,62,58,46,41,37,28,15}
C.{15,28,46,37,84,41,58,62}
D.{15,28,46,37,84,58,62,41}
13.在长度为32的有序表中进行二分查找时,所需进行的关键字比较次数最多为()
A.4B.5
C.6D.7
14.假设在构建散列表时,采用线性探测解决冲突。
若连续插入的n个关键字都是同义
词,则查找其中最后插入的关键字时,所需进行的比较次数为()
A.n-1B.n
C.n+lD.n+2
15.散列文件也称为()
A.顺序文件B.索引文件
C.直接存取文件D.间接存取文件
二、填空题(本大题共10小题,每小题2分,共20分)
请在每小题的空格中填上正确答案。
错填、不填均无分。
16.数据的逻辑结构描述数据元素之间的_________________,与存储方式无关。
17.在一个长度为100的顺序表中删除第10个元素时,需移动___________________个元素。
18.队列的队尾位置通常是随着______________操作而变化的。
19.两个空串联接得到的串的长度为___________________。
20.设对称矩阵A压缩存储在一维数组B中,其中矩阵的第一个元素a11存储在B[0],元素a52存储在B[11],则矩阵元素a36存储在B[______________]中。
21.已知一棵哈夫曼树含有60个叶子结点,
则该树中共有________________个非叶子结点。
22.如图所示的有向图中含有
_______________个强连通分量。
23.已知一组关键字为{15,36,28,97,24,78,47,52,13,86},其中每相邻两个关键字构成一个有序子序列。
对这些子序列进行一趟两两归并的结果是______________。
24.从空树起,依次插入关键字1l,27,35,48,52,66和73构造所得的二叉排序树,在等概率查找的假设下,查找成功时的平均查找长度为____________________。
25.控制区间和控制区域是________________文件的逻辑存储单位。
三、解答题(本大题共4小题,每小题5分,共20分)
26.利用广义表的head和tail操作,可从广义表
L=((a,b),(c,d))
中分解得到原子c,其操作表达式为
head(head(tail(L)));
分别写出从下列广义表中分解得到b的操作表达式。
(1)L1=(a.,b,c,d);
(2)L2=(((a),(b),(c),(d)))。
(1)
(2)
27.画出与如图所示森林对应的二叉树。
28.已知有向图G的定义如下:
G=(V,E)
V={a,b,c,d,e}
E={,,,,,,}
(1)画出G的图形;
(2)写出G的全部拓扑序列。
(1)
(2)
29.已知3阶B-树如图所示。
(1)画出将关键字88插入之后的B-树;
(2)画出将关键字47和66依次插入之后的B-树。
(1)
(2)
四、算法阅读题(本大题共4小题,每小题5分,共20分)
30.假设某个不设头指针的无头结点单向循环链表的长度大于1,s为指向链表中某个结点的指针。
算法f30的功能是,删除并返回链表中指针s所指结点的前驱。
请在空缺处填入合适的内容,使其成为完整的算法。
typedefstructnode{
DataTypedata;
structnode*next;
}*LinkList;
DataTypef30(LinkLists){
LinkListpre,p;
DataTypee;
pre=s;’
p=s->next;
while(
(1)){
pre=p;
____________
(2);
}
pre->next=(3);
e=p->data;
free(p);
returne;
}
(1)
(2)
(3)
31.算法f31的功能是清空带头结点的链队列Q。
请在空缺处填入合适的内容,使其成为一个完整的算法。
typedefstructnode{
DataTypedata;
structnode*next;
}QueueNode;
typedefstruct{
QueueNode*front;//队头指针
QueueNode*rear;//队尾指针
}LinkQueue;
voidf31(LinkQueue*Q){
QueueNode*p,*s;
p=
(1);
while(p!
=NULL){
s=p;
p=p->next;
free(s);
________
(2)=NULL;
Q->rear=_______(3)_______;
}
(1)
(2)
(3)
32.假设采用动态存储分配的顺序串HString作为串的存储结构。
该类型实现的串操作函数原型说明如下:
voidstrinit(HStrings);//置s为空串
intstrlen(HStrings);//求串s的长度
voidstrcpy(HStringto,HStringfrom);//将串from复制到串to
voidstrcat(HStringto,HStringfrom);//将串from联接到串to的末尾
intstrcmp(HStringsl,HStrings2);
//比较串sl和s2的大小,当s1s2时,
//返回值小于0,等于0或大于0
HStringsubstr(HStrings,inti,intm);
//返回串s中从第i(0≤I≤strlen(s)-m)个字符起长度为m的子串
阅读下列算法f32,并回答问题:
(1)设串S=″abcdabcd″,T=″bcd″,V=″bcda″,写出执行f32(S,T,V)之后的S;
(2)简述算法f32的功能。
voidf32(HStringS,HStringT,HStringV){
intm,n,pos,i;
HStringnews;
strinit(news);
n=strlen(S);
m=strlen(T);
pos=i=0;
while(i<=n-m){
if(stremp(substr(S,i,m),T)!
=0)i++;
else{
strcat(news,substr(S,pos,i-pos));
strcat(news,V);
pos=i=i+m;
}
}
strcat(news,substr(S,pos,n-pos));
strcpy(S,news)
}
(1)
(2)
33.假设以二叉链表作为二叉树的存储结构,其类型定义如下:
typedefstructnode{
chardata;
structnode*lchild,*rchild;//左右孩子指针
}BinTNode,*BinTree;
阅读下列算法f33,并回答问题:
(1)已知如图所示的二叉树以T为指向根结点的指针,画出执行f33(T)后的二叉树;
(2)简述算法f33的功能。
voidf33(BinTreeT){
if(T){
f33(T->lchild);
f33(T->rchild);
if((!
T->lchild)&&T->rchild){
T->lchild=T->rchild;
T->rchild=NULL;
}
}
}
(1)
(2)
五、算法设计题(本大题10分)
34.假设以带头结点的单链表表示有序表,单链表的类型定义如下:
typedefstructnode{
intdata;
structnode*next;
}LinkNode,*LinkList;
编写算法,输入n个整数构造一个元素值互不相同的递增有序链表(即相同的整数只取一个)。
算法的函数原型给定为
LinkListf34(intn);
全国2008年1月高等教育自学考试
数据结构试题
课程代码:
02331
一、单项选择题(本大题共15小题,每小题2分,共30分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1.逻辑上通常可以将数据结构分为( )
A.动态结构和静态结构B.顺序结构和链式结构
C.线性结构和非线性结构D.初等结构和组合结构
2.在下列对顺序表进行的操作中,算法时间复杂度为O
(1)的是( )
A.访问第i个元素的前驱(1<
)
B.在第i个元素之后插入一个新元素(
)
C.删除第i个元素(
)
D.对顺序表中元素进行排序
3.假设带头结点的单向循环链表的头指针为head,则该链表为空的判定条件是( )
A.head==NULLB.head–>next==NULL
C.head!
=NULLD.head–>next==head
4.已知栈的最大容量为4。
若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为( )
A.5,4,3,2,1,6B.2,3,5,6,1,4
C.3,2,5,4,1,6D.1,4,6,5,2,3
5.与线性表相比,串的插入和删除操作的特点是( )
A.通常以串整体作为操作对象B.需要更多的辅助空间
C.算法的时间复杂度较高D.涉及移动的元素更多
6.假设以三元组表表示稀疏矩阵,则与如图所示三元组表对应的4×5的稀疏矩阵是(注:
矩阵的行列下标均从1开始)( )
A.
B.
C.
D.
7.以下有关广义表的表述中,正确的是( )
A.由0个或多个原子或子表构成的有限序列
B.至少有一个元素是子表
C.不能递归定义