数据结构期末复习题及答案1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、是非题
1.数据结构概念包括数据之间的逻辑结构,数据在计算机中的存储方式和数据的运
算三个方面。
.......................( T )
2.线性表的逻辑顺序与物理顺序总是一致的........( F )
3.线性表中的每个结点最多只有一个前驱和一个后继。
......( T )
4.线性的数据结构可以顺序存储,也可以链接存储。
非线性的数据结构只能链接存
储。
.......................( F )
5.栈和队列逻辑上都是线性表。
..........................( T )
6.单链表从任何一个结点出发,都能访问到所有结点........( F )
7.单链表形式的队列,头指针F指向队列的第一个结点,尾指针R指向队列的最后
一个结点。
.................................................( T )
8.在用单链表表示的链式队列中,队头在链表的链尾位置。
....( F )
9.多维数组是向量的推广。
..............................( T )
10.栈是一种先进先出的线性表。
....( F )
11.凡是递归定义的数据结构都可以用递归算法来实现它的操作。
......( T )
12.设串S的长度为n,则S的子串个数为n(n+1)/2。
...........( F )
13.一般树和二叉树的结点数目都可以为0。
................( F )
14.按中序遍历二叉树时,某结点的直接后继是它的右子树中第1个被访问的结
点。
....( T )
15.后序序列和中序序列能唯一确定一棵二叉树。
....( T )
16.对于一棵具有n个结点,其高度为h的二叉树,进行任—种次序遍历的时间复杂
度为O(n) .............( T )
17.网络的最小代价生成树是唯一的。
...( T )
18.图的拓扑有序序列不是唯一的。
...( T )
19.进行折半搜索的表必须是顺序存储的有序表。
...( T )
二、单选题
1.算法指的是( D )
A.计算机程序 B.解决问题的计算方法
C.排序算法 D.解决问题的有限运算序列
2.线性表采用链式存储时,结点的存储地址(B )
A.必须是不连续的 B.连续与否均可
C.必须是连续的 D.和头结点的存储地址相连续
3.将长度为n的单链表链接在长度为m的单链表之后的算法的时间复杂度为(C )
A.O(1) B.O(n)C.O(m) D.O(m+n)
4.在一个长度为n的顺序表的表尾插入一个新元素的渐进时间复杂度为( B )。
A.O(n) B.O(1) C.O(n2) D.O(log2n)T
5.线性表L在( B )情况下适用于使用链式结构实现。
A.需经常修改L中的结点值
B.需不断对L进行删除插入
C.L中含有大量的结点
D.L中结点结构复杂
6.设单链表中结点的结构为(data,1ink)。
已知指针q所指结点是指针p所指结点
的直接前驱,若在*q与*p之间插入结点*s,则应执行下列哪一个操作?( B )
A.s一>1ink=p一>1ink;p一>1ink=s
B.q一>1ink=s;s一>link=p
C.p一>link=s一>1ink;s一>1ink=p
D.p一>1ink=s;s一>1ink=q
7.已知指针p所指不是尾结点,若在*p之后插入结点*s,应执行下列哪个操作 (B)
A. s->link = p; p->link = s;
B. s->link = p->link; p->link = s;
C. s->link = p->link; p = s;
D. p->link = s; s->link = p;
8.非空的循环单链表first的尾结点(由p所指向)满足:(C)
A. p->link == NULL;
B. p == NULL;
C. p->link == first;
D. p == first;
9.若让元素1,2,3依次进栈,则出栈次序不可能出现( C )种情况。
A.3,2,1 B.2,1,3
C.3,1,2 D.1,3,2
10.若进栈序列为1234,则不可能得到的出栈序列是 C 。
A)3,2,1,4 B)3,2,4,1, C)4,2,3,1 D)2,3,4,1
11.由两个栈共享一个向量空间的好处是:(B )
A.减少存取时间,降低下溢发生的机率
B.节省存储空间,降低上溢发生的机率
C.减少存取时间,降低上溢发生的机率
D.节省存储空间,降低下溢发生的机率
12.对于顺序存储的队列,存储空间大小为n,头指针为F,尾指针为R。
若在逻辑上
看一个环,则队列中元素的个数为......................(D )
A.R-F B.n+R-F C.(R-F+1)mod n D.(n+R-F)mod n
13.在一个链队列中,假定front和rear分别为队首和队尾指针,则插入指针s所指
的结点的操作为 C 。
A)front->next=s; B)s->next=rear;rear=s;
C)rear->next=s;rear=s; D)s->next=front;front=s;
14.设数组data[m]作为循环队列SQ的存储空间,front为队头指针,rear为队尾指
针,则执行出队操作后其头指针front值为( D )
A.front=front+1 B.front=(front+1)%( m-1)
C.front=(front-1)%m D.front=(front+1)%m
15.如下陈述中正确的是(A )
A.串是一种特殊的线性表B.串的长度必须大于零
C.串中元素只能是字母D.空串就是空白串
16.一个非空广义表的表头( D )
A.不可能是子表B.只能是子表
C.只能是原子D.可以是子表或原子
17.一个递归的定义可以用递归过程求解,也可以用非递归过程求解,但单从运行时
间来看,通常递归过程比非递归过程(B )。
A.较快
B.较慢
C.相同
D.不一定
18.树中所有结点的度等于所有结点数加( C )。
A.0
B.1
C.一1
D.2
19.在一棵具有n个结点的二叉树中,所有结点的空子树个数等于( C )。
A.n
B.n一1
C.n+1
D.2*n
20.某二叉树的前序序列和后序序列正好相反,则该二叉树一定是 B 的二叉树。
A)空或只有一个结点。
B)高度等于其结点数。
C)任一结点无左孩子。
D)任一结点无右孩子。
21.n个结点的二叉树,若用二叉链表存贮则非空闲的左、右孩子链域为C。
A)n B)2n C)n-1 D)n+1
22.在有n个叶子结点的哈夫曼树中,其结点总数为 D 。
(性质3)
A)不确定 B) 2n C) 2n + 1 D)2n - 1
23.已知二叉树叶子数为50,仅有一个孩子的结点数为30,则总结点数为B。
A 130
B 129
C 131
D 不确定
24.在一棵度为3的树中,度为3的结点个数为2,度为2 的结点个数为1,则度为0的
结点个数为( C )
A.4 B.5 C.6
D.7
25.假设一个有n个顶点和e条弧的有向图用邻接表表示,则删除与某个顶点vi相关
的所有弧的时间复杂度是( C )
A.O(n) B.O(e) C.O(n+e) D.O
(n*e)
26.在无向图中定义顶点vi与vj之间的路径为从vi到达vj的一个( A )。
A、顶点序列
B、边序列
C、权值总和
D、边的条数
27.用某种排序方法对关键字序列(25,84,21,47,15,27,68,35,20)进行排
序时,序列的变化情况如下:
20,15,21,25,47,27,68,35,84
15,20,21,25,35,27,47,68,84
15,20,21,25,27,35,47,68,84
则所采用的排序方法是( D )
A.选择排序B.希尔排序 C.归并排序D.快速排序
28.适于对动态查找表进行高效率查找的组织结构是( C )
A.有序表B.分块有序表 C.三叉排序树D.线性链表
29.如果只想得到1024个元素组成的序列中的前5个最小元素,那么用(D)方法最快。
A、起泡排序
B、快速排序
C、堆排序
D、直接选择排序
三、填空题
1.数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储结构无关,是独
立于计算机的。
2.评价数据结构的两条基本标准是:存储需要量和运算的时间效率。
3.算法的五个特性是指有穷性、确定性、可行性、输入和输出。
4.在一个带头结点的单循环链表中,p指向尾结点的直接前驱,则指向头结点的指
针head可用p表示为head= p->next->next 。
5.设单链表中指针P指向结点m,若要删除m之后的结点(若存在),则需修改指针
的语句是: P->next=p->next->next
6.设有一个顺序栈S,元素sl,s2,s3,s4,s5,s6依次进栈,如果6个元素的出
栈顺序为s2,s3,s4,s6,s5,sl,则顺序栈的容量至少应为 3。
7.栈的特点是:后进先出,栈顶的位置是随着进栈和出栈_操作而变化的。
8.若有一个栈的输入序列为1,2,3,….n,输出序列的第一个元素为n,则第i个输
出元素是n-i+1
9.队列的特点是:先进先出,其插入操作在队尾进行,删除操作在队头进行。
10.有数据元素1、2、3,依次进队列,其出队列序列为 123 。
11.已知广义表A=(a,(b,(c,d))),则表尾是((b,(c,d))),深度为3。
12.广义表A((a,b,c),(d,e,f))的表头为(a,b,c),长度为 2 。
13.在串S=“stud”中,子串有11个。
14.设s1=”study”,s2=” hard”,则调用函数strcat(s1, s2)后得到study hard。
15.将一个n阶三对角矩阵A的三条对角线上的元素按行压缩存放于一个一维数组B
中,A[0][0]存放于B[0]中。
对于任意给定数组元素A[I][J],如果它能够在数
组B中找到,则它应在 2*I+J 位置。
16.通常程序在调用另一个程序时,都需要使用一个栈来保存被调用程序内分
配的局部变量、形式参数的存储空间以及返回地址。
17.假定一棵树的广义表表示为A(B(E(K,L),C(G),D(H(M),I,J))),则该树的
度为3,树的深度为3。
18.深度为n的二叉树最多有2n-1个结点。
19.设二叉树的根为第一层,则第i层上的结点数最多有2i-1。
(性质1)
20.在一棵二叉树中,度为2的结点的个数是5,则叶结点的个数为6。
(性质3)
21.n个结点的完全二叉树,其深度h= [log2n]+1。
22.在一棵树中,有且仅有一个结点没有前驱,称为根结点;非根结点有且仅
有一个双亲。
23.在一棵度为二叉树中,度为2的结点个数为8,则叶结点个数为9
24.已知一颗完全二叉树中共有767结点,则该树中共有384 个叶子结点。
25.200个结点的完全二叉树,其深度h= 8。
26.对有n个结点的完全二叉树,编号为i(i>1)结点的双亲结点的编号为 i/2,
当i%2==0时,该结点是其双亲的左孩子。
27.一颗有6个结点的完全二叉树,其结点按编号存放数据为:A、B、C、D、E、F,
若按中根遍历该树得到的数据序列为: DBEAFC。
28.n个顶点的无向完全图具有 n(n-1)/2 条边,n个顶点的有向完全图具有n(n-1)
条弧。
29.在一个图中,所有顶点的度之和等于所有边数的2倍。
30.n个顶点的连通图的生成树具有n-1 条边。
31.关键路径是指AOE-网中从源点到汇点路径长度最大的路径。
32.顺序查找的平均查找长度为 O(n)
折半查找只适用于有序表,且限于顺序存储结构,其平均查找长度为:O(log2n)。
34.设有100个元素,用折半查找时,最大比较次数是 7 。
35.若按中序遍历二叉排序树可得到一个关键字的有序序列。
36.在对一组记录(10,50,25,70,35,22,30,85,40)进行直接插入排序时,当把第6
个记录22插入到有序表时,为寻找插入位置需比较 2 次。
37.希尔排序是属于直接插入排序的改进方法。
38.对一组记录(50,40,95,20,15,70,60,45,80)进行简单选择排序时,第4次交换
和选择后,未排序记录(即无序数)为 50,70,60,95,80 。
39.在单链表上难以实现的排序方法有快速排序、堆排序、希尔排序
40.在有序表(12,24,36,48,60,72,84)中二分查找关键字72时所需进行的
关键字比较次数为___2__。
四、解答题
1.线性表的顺序存储表示和链式存储表示的特点比较。
2.什么是子串?空串和空格串有什么区别?串有哪几种机内表示方法,通常采用哪一种?
3.已知广义表 A=((a, b),c, (d, e, f)) 试画出它的存贮结构图。
4.已知广义表A=((a,b),(c,d)),则表头head(A)和表尾Tail(A)分别是?
5.已知一棵树的先根和后根遍历次序如下:
a b e f g c d h I
e f g b c h I d a
试画出此树,并画出转化后的二叉树,以及此二叉树的中序线索化的逻辑图。
6.对于给定的8个实数W={8,6,23,15,4,20,35,10};试构造huffman树,并求出每个叶子结点的哈夫曼编码。
7.在关键字序列(5,12,31,43,47,73,81,104)中用折半查找法查找关键字为73和75的数据元素,请写出查找过程。
8.关键字序列(48,42,101,10,6,75,30,29)画出二叉排序树和二叉平衡树(AVL树)。
9.给定有以下的关键字序列,试给出冒泡排序的前俩趟排序结果。
[46 56 14 43 95 10 19 72 ]
10.一组记录的关键字为(44 32 65 97 76 13 27 21),用归并排序法对该序列进行排序,则二趟归并后的结果为?
五、算法阅读和设计题
1.阅读下面的算法
LinkList mynote(LinkList L)
{//L是不带头结点的单链表的头指针
if(L&&L->next){
q=L;L=L->next;p=L;
S1: while(p->next) p=p->next;
S2: p->next=q;q->next=NULL;
}
return L;}
请回答下列问题:
(1)说明语句S1的功能;
答:查询链表的尾结点
(2)说明语句组S2的功能;
答:将第一个结点链接到链表的尾部,作为新的尾结点
(3)设链表表示的线性表为(a1,a2, …,an),写出算法执行后的返回值所表示的线性表。
答:返回的线性表为(a2,a3,…,an,a1)
2.下列算法的功能是比较两个链串的大小,其返回值为:
comstr(s1,s2)=
请在空白处填入适当的内容。
int comstr(LinkString s1,LinkString s2)
{//s1和s2为两个链串的头指针
while(s1&&s2){
if(s1->date<s2->date)return-1;
if(s1->date>s2->date)return1;
①;
②;
}
if( ③ )return-1;
if( ④ )return1;
⑤;}
①S1=S1->next
②s2=s2->next
③s2(或s2!=NULL或s2&&!s1)
④s1(或s1!=NULL或s1&&!s2)
⑤return 0
3. 假设两个队列共享一个循环向量空间
其类型Queue2定义如下:
typedef struct{
DateType data[MaxSize];
int front ,rear ;
}Queue2;
对于i=0或1,front[i]和rear[i]分别为第i个队列的头指针和尾指针。
请对以下算法填空,实现第i个队列的入队操作。
int EnQueue (Queue2*Q,int i,DateType x)
{//若第 i个队列不满,则元素x入队列,并返回1;否则返回0
if(i<0||i>1)return 0;
if(Q->rear[i]==Q->front[ ①]return0;
Q->data[ ②]=x;
Q->rear[i]=[ ③ ];
return1;
)
①(i+1)%2(或1-i)
②Q->rear[i]
③(Q->rear[i]+)%Maxsize
4.已知二叉树中的结点类型用BinTreeNode表示,被定义为:
struct BinTreeNode{ElemType dara;BinTreeNode *leftChild,*rightChild:};
其中data为结点值域,lehChild和rightChild分别为指向左、右子女结点的指针域。
下面函数的功能是返回二叉树BT中值为x的结点所在的层号,请在划有横线的地方填写合适的内容。
Int NodeLevel(BinTreeNode *BT,ElemType&x){
if(BT==NULL)return一1 ; //空树的层号为一1
else if(BT一>data==x)return 0;//根结点的层号为0
else{
int c1=NodcLevel(BT一>leftChild,x);//向左子树中查找x结点
if(cl>=0) return cl+1 ;
int c2= NodeLevel(BT—>rightChild,X) ;
if(c2>=0) return c2+1;
else return -1; //在树中不存在x结点返回一l
}
}
试题及答案
一、单选题(每题 2 分,共20分)
1. 1.对一个算法的评价,不包括如下(B )方面的内容。
A.健壮性和可读性B.并行性C.正确性D.时空复杂度
2. 2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结
点,则执行( )。
A. p->next=HL->next; HL->next=p;
B. p->next=HL; HL=p;
C. p->next=HL; p=HL;
D. HL=p; p->next=HL;
3. 3.对线性表,在下列哪种情况下应当采用链表表示?( )
A.经常需要随机地存取元素
B.经常需要进行插入和删除操作
C.表中元素需要占据一片连续的存储空间
D.表中元素的个数不变
4. 4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是
( C )
A. 2 3 1
B. 3 2 1
C. 3 1 2
D. 1 2 3
5. 5.AOV网是一种()。
A.有向图B.无向图C.无向无环图D.有向无环图
6. 6.采用开放定址法处理散列表的冲突时,其平均查找长度()。
A.低于链接法处理冲突 B. 高于链接法处理冲突
C.与链接法处理冲突相同D.高于二分查找
7.7.若需要利用形参直接访问实参时,应将形参变量说明为()参数。
A.值B.函数C.指针D.引用
8.8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具
有相同的()。
A.行号B.列号C.元素值D.非零元素个数
9.9.快速排序在最坏情况下的时间复杂度为()。
A.O(log2n) B.O(nlog2n) C.0(n) D.0(n2)
10.10.从二叉搜索树中查找一个元素时,其时间复杂度大致为( )。
A. O(n)
B. O(1)
C. O(log2n)
D. O(n2)
二、二、运算题(每题 6 分,共24分)
1. 1.数据结构是指数据及其相互之间的______________。
当结点之间存在M
对N(M:N)的联系时,称这种结构为_____________________。
2. 2.队列的插入操作是在队列的___尾______进行,删除操作是在队列的
____首______进行。
3. 3.当用长度为N的数组顺序存储一个栈时,假定用top==N表示栈空,则
表示栈满的条件是___top==0___(要超出才为满)_______________。
4. 4.对于一个长度为n的单链存储的线性表,在表头插入元素的时间复杂度
为_________,在表尾插入元素的时间复杂度为____________。
5. 5.设W为一个二维数组,其每个数据元素占用4个字节,行下标i从0
到7 ,列下标j从0到3 ,则二维数组W的数据元素共占用_______个字节。
W中第6 行的元素和第4 列的元素共占用_________个字节。
若按行顺序存放二维数组W,其起始地址为100,则二维数组元素W[6,3]的起始地址为__________。
6. 6.广义表A= (a,(a,b),((a,b),c)),则它的深度为____________,它的长度为
____________。
7.7.二叉树是指度为2的____________________树。
一棵结点数为N的二叉
树,其所有结点的度的总和是_____________。
8. 8. 对一棵二叉搜索树进行中序遍历时,得到的结点序列是一个
______________。
对一棵由算术表达式组成的二叉语法树进行后序遍历得到的结点序列是该算术表达式的__________________。
9. 9. 对于一棵具有n 个结点的二叉树,用二叉链表存储时,其指针总数为
_____________个,其中_______________个用于指向孩子,_________________个指针是空闲的。
10. 10. 若对一棵完全二叉树从0开始进行结点的编号,并按此编号把它顺序存
储到一维数组A 中,即编号为0的结点存储到A[0]中。
其余类推,则A[ i ]元素的左孩子元素为________,右孩子元素为_______________,双亲元素为____________。
11. 11. 在线性表的散列存储中,处理冲突的常用方法有
________________________和_____________________________两种。
12. 12. 当待排序的记录数较大,排序码较随机且对稳定性不作要求时,宜采用
_______________排序;当待排序的记录数较大,存储空间允许且要求排序是稳定时,宜采用________________________排序。
三、 三、 运算题(每题6分,共24分)
1. 1. 已知一个6⨯5稀疏矩阵如下所示,
试:
(1) (1) 写出它的三元组线性表;
(2) (2) 给出三元组线性表的顺序存储表示。
2. 2. 设有一个输入数据的序列是 { 46, 25, 78, 62, 12, 80 }, 试画出从空树起,
逐个输入各个数据而生成的二叉搜索树。
3. 3. 对于图6所示的有向图若存储它采用邻接表,并且每个顶点邻接表中的
边结点都是按照终点序号从小到大的次序链接的,试写出:
(1) 从顶点①出发进行深度优先搜索所得到的深度优先生成树; ⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--007
00
0000520000
000100000010000
(2) 从顶点②出发进行广度优先搜索所得到的广度优先生成树;
4. 4.已知一个图的顶点集V和边集E分别为:
V={1,2,3,4,5,6,7};
E={<2,1>,<3,2>,<3,6>,<4,3>,<4,5>
,<4,6>,<5,1>,<5,7>,<6,1>,<6,2>,<6,5>}
;
若存储它采用邻接表,并且每个顶
点邻接表中的边结点都是按照终点序图6
号从小到大的次序链接的,按主教材中介绍的拓朴排序算法进行排序,试给出得到的拓朴排序的序列。
四、四、阅读算法(每题7分,共14分)
1. 1.int Prime(int n)
{
int i=1;
int x=(int) sqrt(n);
while (++i<=x)
if (n%i==0) break;
if (i>x) return 1;
else return 0;
}
(1)(1)指出该算法的功能;
(2)(2)该算法的时间复杂度是多少?
2. 2.写出下述算法的功能:
void AJ(adjlist GL, int i, int n)
{
Queue Q;
InitQueue(Q);
cout<<i<<' ';
visited[i]=true;
QInsert(Q,i);
while(!QueueEmpty(Q)) {
int k=QDelete(Q);
edgenode* p=GL[k];
while(p!=NULL)
{
int j=p->adjvex;
if(!visited[j])
{
cout<<j<<' ';
visited[j]=true;
QInsert(Q,j);
}
p=p->next;
}
}
}
五、五、算法填空(共8分)
如下为二分查找的非递归算法,试将其填写完整。
Int Binsch(ElemType A[ ],int n,KeyType K)
{
int low=0;
int high=n-1;
while (low<=high)
{
int mid=_______________________________;
if (K==A[mid].key) return mid; //查找成功,返回元素的下标
else if (K<[mid].key)
______________________________________; //在左子表上继续查找
else __________________________________; //在右子表上继续查找
}
return -1; //查找失败,返回-1
}
六、六、编写算法(共8分)
HL是单链表的头指针,试写出删除头结点的算法。
ElemType DeleFront(LNode * & HL)
参考答案
一、一、单选题(每题2分,共20分)
1.B
2.A
3.B
4.C
5.D
6.B
7.D
8.A
9.D 10.C
二、二、填空题(每空1分,共26分)
1. 1.联系图(或图结构)
2.
2. 尾 首
3.
3. top==0
4.
4. O (1) O (n )
5.
5. 128 44 108
6. 6. 3 3
7. 7. 有序 n-1
8. 8. 有序序列 后缀表达式(或逆波兰式) 9. 9. 2n n-1 n+1
10. 10. 2i+1 2i+2 (i-1)/2 11. 11. 开放定址法 链接法
12. 12. 快速 归并
三、 三、 运算题(每题6分,共24分) 1. 1. (1) ((1,5,1),(3,2,-1),(4,5,-2),(5,1,5),(6,3,7)) (3分) (2) 三元组线性表的顺序存储表示如图7示。
2. 2. 如图8所示。
3. 3. DFS :①②③④⑤
BFS :②③④⑤①
4. 4. 拓朴排序为: 4 3 6 5 7 2 1
四、 四、 阅读算法(每题7分,共14分)
1. 1. (1) 判断n 是否是素数(或质数)
(2)O (n )
2. 2. 功能为:从初始点v i 出发广度优先搜索由邻接表GL 所表示的图。
五、 五、 算法填空(8 分)
(low+high)/2 high=mid-1 low=mid+1
六、 六、 编写算法(8分)
ElemType DeleFront(LNode * & HL)
{
if (HL==NULL){
cerr<<"空表"<<endl;
exit(1);
}
LNode* p=HL;
HL=HL->next;
ElemType temp=p->data;
delete p;
return temp;
}
6 5 5 1 5 1 3 2 -1 4 5 -2 5 1 5 6 3
7 图7
图8。