数据结构试题四套.docx
《数据结构试题四套.docx》由会员分享,可在线阅读,更多相关《数据结构试题四套.docx(22页珍藏版)》请在冰豆网上搜索。
数据结构试题四套
A卷、
选择(共20分每题只有一个正确答案每题2分)
1.数据结构是( D )
A.一种数据类型
B.数据的存储结构
C.一组性质相同的数据元素的集合
D.相互之间存在一种或多种特定关系的数据元素的集合
2.若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为( B )
A.3,2,6,1,4,5 B.3,4,2,1,6,5
C.1,2,5,3,4,6 D.5,6,4,2,3,1
3.求单链表中当前结点的后继和前驱的时间复杂度分别是( C )
A.O(n)和O
(1)B.O
(1)和O
(1)
C.O
(1)和O(n)D.O(n)和O(n)
4.已知指针p和q分别指向某单链表中第一个结点和最后一个结点。
假设指针s指向另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为(A)
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;
5.已知函数Sub(s,i,j)的功能是返回串s中从第i个字符起长度为j的子串,函数Scopy(s,t)的功能为复制串t到s。
若字符串S=″SCIENCESTUDY″,则调用函数Scopy(S,Sub(S,1,7))后得到(C)
A.P=″SCIENCE″B.P=″STUDY″
C.S=″SCIENCE″D.S=″STUDY″
6.对N个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为(A)
A.(N+1)/2B.N/2C.ND.[(1+N)*N]/2
7.下列陈述中正确的是(D)
A.二叉树是度为2的有序树
B.二叉树中结点只有一个孩子时无左右之分
C.二叉树中必有度为2的结点
D.二叉树中最多只有两棵子树,并且有左右之分
8.设有一个10阶的对称矩阵A,采用下三角压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为(B)。
A.13 B.33 C.18 D.40
9.设循环队列中数组的下标范围是1~n,其头尾指针分别为f和r,则其元素个数为(D)
A.r-f B.r-f+1 C.(r-f)modn+1 D.(r-f+n)modn
10.下列关键字序列中,构成小根堆的是(D)
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}
二、填空题(共20分每空2分)
1.链式存储结构的特点是借助(指针)来表示数据元素之间的逻辑关系。
2.假设带头结点的非空单循环链表中仅设尾指针L,则在第1个数据元素结点之前插入指针s所指结点的语句依次是(s->next=L->next->next;),(L->next->next=s;)。
3.无表头结点的链队列Q为空的条件是(Q.front=Q.rear=Null)。
4.不含任何字符的串称为(空串)。
5.表达式“a*b+c/d*f-g”的后缀表达式为(ab*cd/f*+g-)。
6.如果排序过程(具有相同关键字的待排记录的相对位置没有发生改变)称该排序方法是稳定的
7.由权值分别为4,6,2,3的叶子生成一个哈夫曼树,它的带权路径长度为(29)
8.从空树起,依次插入关键字73,1l,35,48,52,27,66构造所得的二叉排序树,在等概率查找的假设下,查找成功时的平均查找长度为(25/7)。
9.判断线索二叉树中某结点指针P所指结点有左孩子的条件是(P->Ltag==0)。
三、应用题(共50分)
1.简述顺序表和链表存储方式的特点。
(6分)
2.
(1)已知一个二叉树如图1所示:
写出该二叉树的先序,中序,后序遍历序列(3分)
(2)把图1对应的二叉树转换为所对应的森林。
(3分)
(3)已知一棵二叉树的中序遍历序列为:
dfebagc,先序遍历序列为:
abdefcg,请画出这棵二叉树(4分)
图1
3.对一组关键字:
26,85,37,20,62,13,29,15,18采用快速排序方法进行排序,用第一个关键字作枢轴,请写出每趟排序结果。
(只写每趟结果)(8分)
4.依次输入序列(62,68,30,61,25,14,53,47,90,84)中元素,生成一棵二插排序树
(1)画出生成后的二叉排序树(3分)
(2)画出删除结点30后的二叉排序树。
(4分)
5.画出右图所示二叉树的中序线索链表的存储表示(带头结点)(7分)。
6.利用广义表的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)))。
(6分)
7.求出下图的一棵最小生成树试画出构造过程(表明你使用的算法以及起始顶点)(6分)
四、算法设计(任选一题,共10分)
1.假设以带头结点的单链表表示非递减有序表,设计一算法删除表中所有值大于min且小于max(假设min 2.编写算法统计二叉树的叶子结点个数.
A卷答案
一、选择(共20分每题只有一个正确答案每题2分)
1-5.D B C A C 6-10.A D B D D
二、填空题(共20分每空2分)
1.指针
2.s->next=L->next->next;L->next->next=s.
3.Q.front=Q.rear=Null
4.空串
5.ab*cd/f*+g-
6.具有相同关键字的待排记录的相对位置没有发生改变
7.29
8.25/7
9.P->Ltag==0
三、应用题(共50分)
1.(共6分)答:
顺序存储:
用地址连续的地址表示逻辑上的相邻关系。
可以实现随机存取,但进行插入删除操作时需要移动大量元素。
适合于查询操作比较多时。
(3分)
链式存储:
用随机的不连续的存储地址存储线性表,通过指针来表示逻辑上的相邻关系。
不能随机存储,要找到链表里面某一元素时必须从头指针开始,依次访问链表。
插入删除操作时只需修改指针,不用移动元素。
适合插入、删除操作比较多时。
(3分)
评分细则:
两者定义2分,优点2分,缺点2分。
2.(共10分)
(1)先:
abdgfhce 中:
dfghbace 后:
fhgdbeca
评分细则:
一个遍历序列1分
(2)
评分细则:
一个图1分
(3)
评分细则:
4分
3.(共8分)
第一趟:
18 15 13 20 26 62 29 37 85 (4分)
第二趟:
13 15 18 20 26 37 29 62 85 (2分)
第三趟:
13 15 18 20 26 29 37 62 85 (2分)
评分细则:
第一趟(4分),第二趟、第三趟各2分。
4.(共7分)
(1)
(2) 或者
(2)
评分细则:
(1)3分
(2)4分
5.(共7分)
评分细则:
整体框架2分,标志域2分,线索3分
6.(共6分)
(1)head (tail(L1))
(2)head(head(tail(head(L2))))
评分细则:
(1)3分
(2)3分
7.(共6分)
答案一:
答案二:
答案三:
评分细则:
1、2、3,4步2分;5、6步2分;7步2分
四、算法设计(任选一题,共10分)
1.(共10分)
StatusDelete_Between(LinkList&L,intmax,intmin)
{p=L; (2分)
While(p->next->data<=min)p=p->next; (3分)
if(p->next)
{q=p->next;
While(q->datanext;free(k);} (3分)
p->next=q;
} (2分)
}
2.(共10分)
intLeafCount_Bitree(BiTreeT)
{ if(!
T)return0; (3分)
elseif(!
T->lch&&!
T->rch)return1; (3分)
else
returnLeafCount_Bitree(T->lch)+LeafCount_Bitree(T->rch); (4分)
}
B卷
一、选择(共20分每题只有一个正确答案每题2分)
1.一个算法应该是( B )。
A.程序 B.问题求解步骤的描述
C.要满足五个基本特性 D.A和C.
2.下面程序段的时间复杂度为( D )。
s=0;
for(i=1;i for(j=1;j
s+=i*j;
A.O
(1) B.O(logn) C.O(n) D.O(n2)
3.已知指针p和q分别指向某单链表中第一个结点和最后一个结点。
假设指针s指向另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为( A )。
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;
4.已知循环队列的存储空间为数组data[21],且当前队列的头指针和尾指针的值分别为8和3,则该队列的当前长度为( C )。
A.5 B.6 C.16 D.17
5.通常将链串的结点大小设置为大于1是为了( B )。
A.提高串匹配效率 B.提高存储密度
C.便于插入操作 D.便于删除操作
6.表头和表尾均为空表的广义表是( B )。
A.() B.(())
C.((())) D.((),())
7.设栈的输入序列是1,2,3,4则( D )不可能是其出栈序列。
A.1,2,4,3, B.2,1,3,4,
C.1,4,3,2, D.4,3,1,2,
8.用二叉链表表示具有n个结点的二叉树时,值为空的指针域的个数为( C )。
A.n-1 B.n
C.n+l D.2n
9.为便于判别有向图中是否存在回路,可借助于( D )。
A.广度优先搜索算法 B.最小生成树算法
C.最短路径算法 D.拓扑排序算法
10.下列四个序列中,哪一个是堆(C )。
A.75,65,30,15,25,45,20,10 B.75,65,45,10,30,25,20,15
C.75,45,65,30,15,25,20,10 D.75,45,65,10,25,30,20,15
二、填空题(共20分,每空2分)
1.线性表L=(a1,a2,…,an)含有n个元素,用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是 (n-1)/2。
2. 操作受限后进先出的线性表 是栈。
3.在目标串S[0..n-1]=″xwxxyxy″中T=”xy”,则Index(S,T,0)的执行结果是 3 。
4.由权值分别为4,6,2,8的叶子生成一个哈夫曼树,它的带权路径长度为 38 。
5.三元组表适合存储 稀疏 矩阵.
6.从空树起,依次插入关键字73,81,35,48,52,27,66和构造所得的二叉排序树,在等概率查找的假设下,查找成功时的平均查找长度为 20/7 。
7.在折半查找中,要求被查找的元素必须采用 顺序 存储结构。
8.产生冲突现象的两个关键字称为该散列函数的 同义词 。
9.若采用孩子兄弟链表作为树的存储结构,则树的后根遍历应对应采用二叉树的 中根 遍历。
10.对一个栈S,栈底指针用base表示,栈顶指针用top表示,数组的长度为L,则栈满的条件为 (s.top-s.base)>=L 。
三、应用题(共50分)
1.简述顺序表和链表存储方式的特点。
(5分)
2.
(1)已知一个二叉树如图1所示:
写出该二叉树的先序,中序,后序遍历序列(3分)
(2)把图1对应的二叉树转换为所对应的森林。
(3分)
(3)已知一棵二叉树的中序遍历序列为:
dfebagc,先序遍历序列为:
abdefcg,请画出这棵二叉树(4分)
3.画出图2所示二叉树的中序线索链表的存储表示(带头结点)(5分)。
4.已知带权图的邻接表如下所示,其中边表结点的结构为:
(8分)
依此邻接表从顶点C出发进行深度优先遍历。
(1)写出依次从顶点C出发进行的深度优先遍历序列。
(2)写出依次从顶点C出发进行的广度优先遍历序列。
5.对一组关键字:
26,85,37,10,62,18,29,15采用快速排序方法进行排序,用第一个关键字作枢轴,请写出每趟排序结果。
(只写每趟结果)(7分)
6.利用广义表的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)。
(7分)
7.已知一个无向图如下图所示,要求分别用Prim(普里姆)(假设以①为起点)和Kruskal(克鲁斯卡尔)算法生成最小树,试画出构造过程。
(8分)
四、算法设计(10分)
1.假设以带头结点的单链表表示非递减有序表,单链表的类型定义如下:
typedefstructnode{
DataTypedata;
structnode*next;
}LinkNode,*LinkList;
设计一算法使得插入一个数值为x的结点后,单链表仍有序。
(5分)
2.设从键盘输入一整数的序列:
a1,a2,a3,…,an,试编写算法实现:
用栈结构存储输入的整数,当ai≠-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。
算法应对异常情况(入栈满等)给出相应的信息。
(注意:
算法中直接利用栈的基本操作,如push(),pop(),stackempty(),stacklength等来实现)。
(5分)
B卷答案
一、选择(每题2分,共20分)
1-5..B D A C B 6-10.B D C D C
二、填空题(每空2分,共20分)
1.(n-1)/2
2.操作受限后进先出的线性表
3.3
4.38
5.稀疏
6.20/7
7.顺序
8.同义词
9.中根
10.(s.top-s.base)>=L
三、应用题(共50分)
1.(5分)答:
顺序存储:
用地址连续的地址表示逻辑上的相邻关系。
可以实现随机存取,但进行插入删除操作时需要移动大量元素。
适合于查询操作比较多时。
链式存储:
用随机的不连续的存储地址存储线性表,通过指针来表示逻辑上的相邻关系。
不能随机存储,要找到链表里面某一元素时必须从头指针开始,依次访问链表。
插入删除操作时只需修改指针,不用移动元素。
适合插入、删除操作比较多时。
评分细则:
两者定义2分,优点2分,缺点2分。
2.答:
(1)先:
abdghcef 中:
dhgbaefc 后:
hgdbfeca(3分)
(2) (3分)
(3)(4分)
3.(5分)答:
4.(8分)答:
(1) CDBAFE
(2) CDABFE
评分细则:
(1)4分;
(2)4分。
5.(7分)答:
(1) 1518102662372985
(2) 1015182629376285
(3) 1015182629376285
评分细则:
(1)2分;
(2)2分;(3)3分。
6.(7分)答:
(1)head(tail(head(L1)))
(2)head(head(head(tail(L2))))
评分细则:
(1)3分;
(2)4分。
7.(8分)答:
(1)
(2) (3) (4) (5)
(1)
(2) (3) (4) (5)
评分细则:
Prim(普里姆)和Kruskal(克鲁斯卡尔)最小树各4分。
四、算法设计(每题5分,共10分)
1.(5分)
voidInsertLlist(LinkList&L,ElemTypex)
{LinkListP,S,q;
P=L->next;q=L;
for(;P&&P->datanext);
S=(LinkList)malloc(sizeof(LinkNode));
S->data=x;
S->next=NULL;
S->next=P;
q->next=S;
}
2.(5分)
void Function(StackS,inta[n])
{ inti,e,length;
for(i=0;i {if(a[i]==-1)
{if((S.top-S.base)>=StackLength(S))
{ S.base=(ElemTyp*)realloc(S.base,(S.stacksize+StackIncrement)*sizeof(ElemType));
S.top=S.base+S.stacksize;
S.stacksize=S.stacksize+StackIncrement;}
Push(S,s[i]);
else
if(!
StackEmpty){Pop(S,e);Printf(e);}
}
}
C卷
一、单项选择(共20分,每小题2分)
1.下列关于存储结构的叙述中,正确的是____C_____。
A.顺序存储方式只能用于存储线性结构。
B.线性表的逻辑顺序与存储顺序总是一致的。
C.散列法存储的基本思想是由关键字的值决定数据的存储地址。
D.静态链表具有动态链表的优点,它存取表中第i个元素的时间与i无关。
2.在一个长度为n的顺序存储线性表中,向第i个元素(1≤i≤n+1)之前插入一个新元素时,需要从后向前依次后移 C 个元素。
A.n-i B.n-i-1 C.n-i+1 D.i
3.设n个元素的进栈序列是a1,a2,a3,…,an,出栈序列是1,2,3,…,n,若a3=1,则a1的值是 C 。
A.可能是2 B.一定是2 C.不可能是2 D.不可能是3
4.设栈s和队列Q的初始状态为空, 元素b1 ,b2, ,b3 ,b4 ,b5和b6 依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是b2 ,b4 ,b3 ,b6 ,b5 ,b1 ,,则栈S的容量至少应该是 A 。
A.3 B.4 C.5 D.其它
5.由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为 A 。
A. 53 B. 48 C. 72 D. 24
6.如将一棵有n个结点的完全二叉树按顺序存放方式,存放在下标编号为0, 1,…, n-1的一维数组中,设某结点下标为k(k>0),则其双亲结点的下标是 A 。
A.(k-1)/2 B.(k+1)/2 C.k/2 D.k-1
7.在一棵高度小于3的二叉树中,若结点的前序序列为ABCDEF,则结点的中序序列有可能为 B 。
A.DCEBAF B.CBDAFE C.BCDAFE D.FCADBE
8.在下面几组关键字中,哪个是最小堆____B___。
A.{05,13,55,94,17,46,42} B.{05,42,13,55,94,17,46}
C.{05,42,17,94,55,13,46} D.{94,42,55,01,17,13,46}
9.有数据{53,30,37,12,45,24,96},从空二叉树开始逐个插入数据来形成二叉搜索树,若希望高度最小,则应选择下面哪个序列输入 B 。
A.45,24,53,