数据结构1Word文档下载推荐.docx
《数据结构1Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构1Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
A.仅修改头指针 B.仅修改尾指针
C.头、尾指针都要修改D.头、尾指针可能都要修改
7.对线性表,在下列哪种情况下应当采用链表表示?
A.经常需要随机地存取元素B.经常需要进行插入和删除操作
C.表中元素需要占据一片连续的存储空间D.表中元素的个数不变
8.字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成()个不同的字符串?
A.5B.4 C.6 D.1
9.下述哪一条是顺序存储方式的优点?
A.存储密度大B.插入运算方便
C.删除运算方便D.可方便地用于各种逻辑结构的存储表示
10.从二叉搜索树中查找一个元素时,其时间复杂度大致为()。
A.O(n)B.O
(1)C.O(log2n)D.O(n2)
11.由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为________。
A24B48C72D53
12.下列关于二叉树遍历的叙述中,正确的是()。
A.若一个结点是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序最后一个结点
B.若一个点是某二叉树的前序遍历最后一个结点,则它必是该二叉树的中序遍历的最后一个结点
C.若一个树叶是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序遍历最后一个结点
D.若一个树叶是某二叉树的前序最后一个结点,则它必是该二叉树的中序遍历最后一个结点
13.高度k的二叉树的最大结点数为().
A.2k-1B.2K+1C.2K-1 D.2k-1
14.下面关于图的存储的叙述中正确的是().
A.用邻接表法存储图,占用的存储空间大小只与图中结点个数有关,而与边数无关
B.用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关
C.用邻接矩阵法存储图,占用的存储空间大小只与图中结点个数有关,而与边数无关
D.用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关
15.在顺序表(2,5,7,10,14,15,18,23,35,41,52)中,用二分法查找关键码值10,所需的关键码比较次数为
A.2B.3C.4D.5
16.对线性表进行二分法查找,其前提条件是().
A.线性表以顺序方式存储,并且按关键码值排好序
B.线性表以顺序方式存储,并且按关键码值的检索频率排好序
C.线性表以链接方式存储,并且按关键码值排好序
D.线性表以链接方式存储,并且按关键码值的检索频率排好序
17.下列哪一个关键码序列不符合堆的定义?
A.a、c、d、g、h、m、p、q、r、xB.a、c、m、d、h、p、x、g、o、r
C.a、d、p、r、c、q、x、m、h、gD.a、d、c、m、p、g、h、x、r、q
18.对n个记录的文件进行快速排序,所需要的辅助存储空间为
A.O
(1) B.O(1og2n) C.O(n) D.O(n2)
19.在待排序文件已基本有序的前提下,下述排序方法中效率最高的是
A.直接插入排序 B.直接选择排序 C.快速排序 D.归并排序
20.设有关键码序列(q,g,m,z,a,n,p,x,h),下面哪一个序列是从上述序列出发建堆的结果?
A.a,g,h,m,n,p,q,x,z B.a,g,m,h,q,n,p,x,z
C.g,m,q,a,n,p,x,h,zD.h,g,m,p,a,n,q,x,z
21.下列关于数据结构的叙述中,正确的是().
A.数组是同类型值的集合
B.递归算法的程序结构比迭代算法的程序结构更为精炼
C.树是一种线性结构
D.用一维数组存储二叉树,总是以先序遍历的顺序存储各结点
2.B3.D4.C5.A6.B7.D8.B9.A10.A11.C12.D13.D14.A15.C16.B17.A18.C19.B20.A21.C22.A
二、填空题
1.数据的逻辑结构被分为___集合结构__、_线性结构__、__树结构__和__图结构四种。
2.数据的物理结构被分为____顺序链表索引散列_____四种。
3.一个算法的时间复杂度为(3n2+2nlog2n+4n-7)/(5n),其数量级表示为__O(n)_____。
4.对于一个长度为n的单链存储的线性表,在表头插入元素的时间复杂度为______O
(1)_____,在表尾插入元素的时间复杂度为_______O(n)_______。
5.对于一个长度为n的顺序存储的线性表,在表头插入元素的时间复杂度为_________,在表尾插入元素的时间复杂度为____________。
6.在以HL为表头指针的带表头附加结点的单链表和循环单链表中,链表为空的条件分别为________和________。
7.从一个链栈中删除一个结点时,需要把栈顶结点的_________域的值赋给________。
8.进行函数调用时,需要把每个实参的值和调用后的________传送给被调用的函数中。
9.在线性表的单链存储中,若一个元素所在的结点地址为p,则其后继结点的地址为_________,若假定p为一个数组a中的下标,则其后继结点的下标为_____________。
10.栈又称为_______________表,队列又称为___________表。
11.中缀算式(3+4)*2/(8-5)所对应的后缀算式为_______________________________。
12.后缀算式423*+105/-的值为__________。
13.对于一棵具有n个结点的二叉树,一个结点的编号为i(1≤i≤n),若它有左孩子则左孩子结点的编号为________,若它有右孩子,则右孩子结点的编号为________,若它有双亲,则双亲结点的编号为________。
14.在一棵高度为5的理想平衡树中,最少含有________个结点,最多含有________个结点。
15.假定一棵树的广义表表示为A(B(C,D(E,F,G),H(I,J))),则树中所含的结点数为____个,树的深度为______,树的度为_________。
16.若一棵二叉树中只有叶子结点和左、右子树皆非空的结点,设叶结点的个数为K,则左、右子树皆非空的结点个数是________。
17.在树中,一个结点的直接后继结点的个数称为该结点的________。
18.在n个带权叶子结点构造出的所有二叉树中,带权路径长度最小的二叉树称为________。
WPL称为_____________________。
19.对一棵二叉搜索树进行中序遍历时,得到的结点序列是一个__________。
20.当向一个小根堆插入一个具有最小值的元素时,需要逐层_________调整,直到被调整到____________位置为止。
21.在一个堆的顺序存储中,若一个元素的下标为i(0≤i≤n-1),则它的左孩子元素的下标为______,右孩子元素的下标为________。
22.在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有向完全图中,包含有________条边。
23.对于一个具有n个顶点和e条边的有向图和无向图,若采用边集数组表示,则存于数组中的边数分别为________和________条。
24.以二分查找方法从长度为12的有序表中查找一个元素时,平均查找长度为________。
25.假定一个线性表为(12,23,74,55,63,40,82,36),若按Key%3条件进行划分,使得同一余数的元素成为一个子表,则得到的三个子表分别为_____________、_____________和_____________。
26.在线性表的散列存储中,装填因子又称为装填系数,若用m表示散列表的长度,n表示待散列存储的元素的个数,则等于________。
27.在一棵m阶B_树上,每个非树根结点的关键字数目最少为________个,最多为________个,其子树数目最少为________,最多为________。
28.表示图的三种常用的存储结构为__________、_______和________。
29.对于一个具有n个顶点和e条边的有向图和无向图,在其对应的邻接表中,所含边结点分别有_______个和________个。
30.对用邻接矩阵表示的有向图进行任一种遍历时,其时间复杂度为_________。
对用邻接表表示的有向图进行任一种遍历时,其时间复杂度为________。
31.对于线性表(70,34,55,23,65,41,20,100)进行散列存储时,若选用H(K)=K%9作为散列函数,则散列地址为1的元素有________个,散列地址为7的有_______个。
32.在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度为________,整个堆排序过程的时间复杂度为________。
33.快速排序在平均情况下的时间复杂度为________,在最坏情况下的时间复杂度为________。
34.在归并排序中,进行每趟归并的时间复杂度为______,整个排序过程的时间复杂度为____________,空间复杂度为___________。
35.在快速排序、堆排序、归并排序中,_________排序是稳定的。
三、运算题
1.在如下数组A中链接存储了一个线性表,表头指针为A[0].next,试写出该线性表。
a01234567
data
60
50
78
90
34
40
4
3
2
5
7
1
2.假定一棵二叉树广义表表示为a(b(c),d(e,f)),分别写出对它进行先序、中序、后序、按层遍历的结果。
先序:
中序:
后序:
按层:
3.已知一棵二叉树的先序遍历的结果是ABECDFGHIJ,中序遍历的结果是EBCDAFHIGJ,试画出这棵二叉树。
4.铁路进行列车调度时,常把站台设计成栈式结构的站台,如下图1所示。
试问:
(1)设有编号为1,2,3,4的四辆列车,顺序开入栈式结构的站台,则可能的出栈序列有多少种?
(2)若进站的四辆列车顺序如上所述,那么是否能够得到4123这样的出栈序列?
如果不能,说明为什么不能。
如果能,说明如何得到该序列的(即写出“进栈”或“出栈”的序列)。
(3)若进站的四辆列车顺序如上所述,那么是否能够得到3421这样的出栈序列?
图1
5.写出下列中缀表达式的后缀形式:
(1)A*B*C
(2)A+B–C+D
(3)A*B+C
(4)(A+B)*D+E/(F+A*D)+C
6.画出下列广义表的带有附加表头结点的链接存储结构图,并给出它们的长度和深度。
(1)D=((a,b),(c,d))
(2)A=((a,(b,c),((d),e)))
7.将一组元素37,56,23,65,22,10,29依次插入一棵空二叉搜索树中,请画出该二叉搜索树。
8.设有序顺序表中的元素依次为017,094,154,170,275,503,509,512,553,612,677,765,897,908。
试画出对其进行折半搜索时的判定树,并计算搜索成功的平均搜索长度和搜索不成功的平均搜索长度。
9.已知一个图的顶点集V和边集E分别为:
V={0,1,2,3,4,5,6,7};
E={(0,1)8,(0,2)5,(0,3)2,(1,5)6,(2,3)25,(2,4)13,(3,5)9,(3,6)10,
(4,6)4,(5,7)20};
(1)按照普里姆算法从顶点0出发得到最小生成树,试写出在最小生成树中依次得到的各条边。
(2)用克鲁斯卡尔算法得到最小生成树,试写出在最小生成树中依次得到的各条边。
10.已知一个图的顶点集V和边集E分别为:
V={1,2,3,4,5,6,7,8};
E={(1,2),(1,3),(2,4),(2,5),(3,6),(3,7),(4,8),(5,8),
(6,8),(7,8)};
若存储它采用邻接表,并且每个顶点邻接表中的边结点都是按照终点序号从小到大的次序链接的,则:
(1)给出从1号顶点出发按主教材中介绍的按深度优先搜索遍历的顶点序列
(2)给出从1号顶点出发按主教材中介绍的按广度优先搜索遍历的顶点序列
(提示:
先画出对应的图形,然后再运算)。
11.已知一个图的顶点集V和边集E分别为:
E={(0,2),(1,3),(1,4),(2,4),(2,5),(3,6),(3,7),(4,7),(4,8),
(5,7),(6,7),(7,8)};
若存储它采用邻接表,并且每个顶点邻接表中的边结点都是按照终点序号从小到大的次序链接的,按主教材中介绍的拓朴排序算法进行排序,试给出得到的拓朴排序的序列。
(提示:
12.散列表的地址区间为0-16,散列函数为H(K)=K%17,采用线性探查法处理冲突,并已将关键字序列26、25、72、38、8、18、59依次存储到了散列表中:
(1)元素59存放在散列表中的地址是多少?
(2)搜索元素59需要比较的次数是多少?
13.已知待散列的线性表为(36,15,40,63,22),散列用的一维地址空间为[0..6],假定选用的散列函数是H(K)=K%7,若发生冲突采用线性探查法处理,试:
(1)计算出每一个元素的散列地址并在下图中填写出散列表;
(2)求出在查找每一个元素概率相等情况下的平均查找长度。
6
14.假定一组记录的排序码为(46,79,56,38,40,80,25,34),试写出对其进行快速排序的第一次划分的结果。
四、阅读算法,回答问题
1.voidAE(Stack&
S)
{
InitStack(S);
Push(S,30);
Push(S,40);
Push(S,50);
intx=Pop(S)+2*Pop(S);
Push(S,x);
inti,a[4]={5,8,12,15};
for(i=0;
i<
4;
i++)Push(S,a[i]);
while(!
StackEmpty(S))cout<
<
Pop(S)<
’‘;
}
该算法被调用后得到的输出结果为:
2.voidAJ(adjlistGL,inti,intn)
QueueQ;
InitQueue(Q);
cout<
visited[i]=true;
Qinsert(Q,i);
QueueEmpty(Q)){
intk=Qdelete(Q);
edgenode*p=GL[k];
while(p!
=NULL)
{
intj=p->
adjvex;
if(!
visited[j]){
cout<
j<
visited[j]=true;
Qinsert(Q,j);
}
p=p->
}
该算法的功能为:
3.指出下列算法的功能,并求出时间复杂度:
(1)intsum1(intn)
{
intp=1,s=0;
for(inti=1;
=n;
i++){
p*=i;
s+=p;
returns;
(2)intsum2(intn)
ints=0;
intp=1;
for(intj=1;
=i;
j++)
p*=j;
s+=p;
4.在下面的每个程序段中,假定线性表La的类型为List,元素类型ElemType为int,并假定每个程序段是连续执行的。
试写出每个程序段执行后所得到的线性表La。
(1)InitList(La);
Inta[]={48,26,57,34,62,79};
For(i=0;
6;
i++)
Insert(La,a[i]);
TraverseList(La);
(2)Insert(La,56);
DeleteFront(La);
InsertRear(La,DeleteFront(La));
TraverseList(La);
(3)For(i=1;
=3;
Intx=GetElem(La,i);
If(x%2==0)Delete(La,x);
(4)ClearList(La);
InsertRear(La,a[i]);
Delete(La,a[5]);
Sort(La);
Insert(La,a[5]/2);
五、算法填空,在画有横线的地方填写合适的内容。
1.向单链表的末尾添加一个元素的算法。
VoidInsertRear(Lnode*&
HL,constElemType&
item)
{
Lnode*newptr;
newptr=newLnode;
If(______________________)
cerr<
”Memoryallocationfailare!
”<
endl;
exit
(1);
}
newptr->
data=item;
_________________=NULL;
if(HL==NULL)
HL=newptr;
else{
Lnode*P=HL;
While(P->
next!
=NULL)
____________________;
p->
next=newptr;
2.向以BST为树根指针的二叉搜索树上插入值为item的结点的递归算法。
voidInsert(BtreeNode*&
BST,constElemType&
if(BST==NULL)
{BtreeNode*p=newBtreeNode;
p->
_______________________;
BST=p;
elseif(item<
BST->
data)___________________;
else________________________;
3.二分查找的递归算法。
IntBinsch(ElemTypeA[],intlow,inthigh,KeyTypeK)
if(low<
=high){
intmid=(low+high)/2;
if(_____________________)
returnmid;
//查找成功,返回元素的下标
elseif(K<
A[mid])
returnBinsch(A,low,mid-1,K);
//在左子表上继续查找
elsereturn_____________________________;
//在右子表上继续查找
else________________;
//查找失败,返回-1
数据结构模拟试题参考答案
一、填空题
5.O(n)O
(1)
6.HL->
next==NULLHL->
next==HL
7.指针(或next)栈顶指针(或HS)
8.返回地址
9.p->
nexta[p].next
10.先进后出表(或后进先出表)先进先出表
11.34+2*85-/
12.8
13.2i2i+1i/2(或i/2)
14.1631
15.1043
16.k-1
17.度
18.哈夫曼树木带权路径长度
19.有(或升)序序列
20.向上根
21.2i+12i+2
22.n(n-1)/2n(n-1)
23.ee
24.37/12
25.(12,63,36)(55,40,82)(23,74)
26.n/m
27.m/2-1m-1m/2m
28.邻接矩阵邻接表边集数组
29.e2e
30.O(n2)O(e)
31.22
32.O(log2n)O(nlog2n)
33.O(nlog2n)O(n2)
34.O(n)O(nlog2n)O(n)
35.归并
1.【解答】
(90,34,40,60,78,50)
2.【解答】
a,b,c,d,e,f
c,b,a,e,d,f
c,b,e,f,d,a按层:
a,b,d,c,e,f
3.【解答】
当前序序列为ABECDFGHIJ,中序序列为EBCDAFHIGJ时,逐步形成二叉树的过程如下图2所示: