数据结构复习资料
栈和队列的共同特点是( )。
A.只允许在端点处插入和删除元素
B.都是先进后出
C.都是先进先出
D.没有共同点
答案:A
解析:栈的操作只允许在栈的一端进行插人和删除操作。队列的操作只允许在队列的一端进行插入操作,在另一端进行删除操作。用链接方式存储的队列,在进行插入运算时( ).
A. 仅修改头指针 B. 头、尾指针都要修改
C. 仅修改尾指针 D.头、尾指针可能都要修改
答案:D
解析:我觉得题目描述不够严谨,若将题目改为“用无头结点链接方式存储的队列”,则选D更为合理一些。因为若是带头结点链接方式存储的队列,在进行插入运算时只需修改尾指针;但若是用无头结点链接方式存储的队列,在进行插入运算时,(1)队列不为空:只需修改尾指针(2)队列为空:头尾指针都需要修改。以下数据结构中哪一个是非线性结构?( )
A. 队列 B. 栈 C. 线性表 D. 二叉树
答案:D
解析:(1)常用的线性结构:线性表、栈、队列、数组、串
(2)多维数组、广义表、数、图设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3]3存放在什么位置?脚注(10)表示用10进制表示。
A.688 B.678 C.692 D.696
答案:C
解析:要想求A[3][3]的位置应先求出每个一维数组所含元素的个数,即求出n的值:644+2*n+2=676,n=(676-644-2)/2=15
则:A[3][3]的存放位置为:A[2][2]+n+1=676+15+1=692树最适合用来表示( )。
A.有序数据元素 B.无序数据元素
C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据
答案:C
解析:因为树形结构很自然的就具有分支层次关系二叉树的第k层的结点数最多为( ).
A.2^k-1 B.2K+1 C.2K-1 D. 2^(k-1)
答案:D
解析:嗯。。。这个。。。嗯。。。要想第K层的结点数最多则应为K-1层的二倍,因此,设第i层的结点数为a[i]
第一层:a[1]=2^0=1
第二次:a[2]=2^1=2
第三层:a[3]=2^2=4
第 k 层:a[k]=2^(k-1)若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查找,则查找A[3]的比较序列的下标依次为( )
A. 1,2,3 B. 9,5,2,3
C. 9,5,3 D. 9,4,2,3
答案:D
解析:对于这道题,我们首先应该理解二分查找的思想:首先以整个查找表作为查找范围,用查找条件中给定值A[3]与中间位置的关键字(A[(18+1)/2]=A[9])比较,若相等,则查找成功;否则,根据比较结果缩小查找范围,如果A[3]的值小于关键字的值,根据查找表的有序性可知查找的数据元素只有可能在表的前半部分,即在左半部分子表中,所以继续对左子表进行二分查找;若A[3]的值大于中间结点的关键字值,则可以判定查找的数据元素只有可能在表的后半部分,即在右半部分子表中,所以应该继续对右子表进行二分查找。每进行一次二分查找,要么查找成功,结束查找,要么将查找范围缩小一半,如此重复,直到查找成功或查找范围缩小为空即查找失败为止。
具体的查找过程为:
第一次查找,(1+18)/2=9
第二次查找,(1+8)/2=4
第三次查找,(1+3)/2=2
第四次查找,(3+3)/2=3对n个记录的文件进行快速排序,所需要的辅助存储空间大致为
A. O(1) B. O(n) C. O(log2 n) D. O(n^2)
答案:C
解析:因为快速排序是通过递归算法来完成的,递归深度约为log2 n,所以对n个记录文件进行快速排序所需的辅助存储空间为O(log2 n)对于线性表(7,34,55,25,64,46,20,10)进行散列存储时,若选用H(K)=K %9作为散列函数,则散列地址为1的元素有( )个
A.1 B.2 C.3 D.4
答案:D
解析:55%9=1,64%9=1,46%9=1,10%9=1设有6个结点的无向图,该图至少应有( )条边才能确保是一个连通图。
A. 5 B. 6 C.7 D.8
答案:A
解析:连通图的定义为:在一个无向图 G 中,若从顶点i到顶点j有路径相连(当然从j到i也一定有路径),则称i和j是连通的。所以只要将这六个结点连接起来即可,因此只需要5条边。下面关于线性表的叙述错误的是( )。
(A) 线性表采用顺序存储必须占用一片连续的存储空间
(B) 线性表采用链式存储不必占用一片连续的存储空间
(C) 线性表采用链式存储便于插入和删除操作的实现
(D) 线性表采用顺序存储便于插入和删除操作的实现
答案:D
解析:D.错误,顺序存储的线性表若进行插入和删除操作,需要移动插入(删除)点后的所有数据,不方便;A.正确,顺序存储的线性表类似于数组;B.正确,链式存储的线性表只需每个结点用一个指针指向下一个结点即可;C.正确,链式存储的线性表在插入和删除操作的时候只需改变指针即可。设哈夫曼树中的叶子结点总数为m,若用二叉链表作为存储结构,则该哈夫曼树中总共有( )个空指针域。
(A) 2m-1 (B) 2m (C) 2m+1 (D) 4m
答案:B
解析:首先说一下什么是二叉链表存储结构,树的二叉链表实现方式又称孩子兄弟表示法,以二叉链表作为树的存储结构。链表中结点的两个链域分别指向该结点的第一个孩子结点和它的下一个兄弟结点。因此,设哈夫曼树的结点总共有n个,则空指针域有:m(m个叶子结点的孩子域为空)+1(根结点的兄弟域为空)+(n-1)/2(除根结点外,其余结点中一半的结点的兄弟域为空)=2m设顺序循环队列Q[0:M-1]的头指针和尾指针分别为F和R,头指针F总是指向队头元素的前一位置,尾指针R总是指向队尾元素的当前位置,则该循环队列中的元素个数为( )。
(A) R-F (B) F-R (C) (R-F+M)%M (D) (F-R+M)%M
答案:C
解析:对于循环队列的头指针和尾指针,其位置关系无非两种情况:(1)R>=F,元素个数为R-F;(2)否则元素个数为(R+M-F)%M设某棵二叉树的中序遍历序列为ABCD,前序遍历序列为CABD,则后序遍历该二叉树得到序列为( )。
(A) BADC (B) BCDA (C) CDAB (D) CBDA
答案:A
解析:由前序遍历序列为CABD可知C为根结点,又根据中序遍历序列为ABCD可知A和B在C的左子树,D在C的右子树;再由中序与前序遍历都为AB的顺序可知B为A的右子树。由此可以得到此二叉树,再按后序遍历即可得到结果。设某完全无向图中有n个顶点,则该完全无向图中有( )条边。
(A) n(n-1)/2 (B) n(n-1) (C) n2 (D) n2-1
答案:A
解析:首先我们应该了解完全无向图的定义:即无向图的每对不同的顶点之间都恰连有一条边相连。由此可以推出在完全无向图中任取两个顶点一定相连,有C(n,2)=n(n-1)/2种取法,即总共有C(n,2)=n(n-1)/2条边。设某棵二叉树中有2000个结点,则该二叉树的最小高度为( )。
(A) 9 (B) 10 (C) 11 (D) 12
答案:C
解析:若要求有2000个结点的二叉树的最小高度,则此二叉树应为完全二叉树,由此可求出此完全二叉树的高度为:log2(2000)向下取整+1=11设某有向图中有n个顶点,则该有向图对应的邻接表中有( )个表头结点。
(A) n-1 (B) n (C) n+1 (D) 2n-1
答案:B
解析:由邻接表的定义可知有n个顶点的有向图对应的邻接表中有n个表头结点。设一组初始记录关键字序列(5,2,6,3,8),以第一个记录关键字5为基准进行一趟快速排序的结果为( )。
(A) 2,3,5,8,6 (B) 3,2,5,8,6
(C) 3,2,5,6,8 (D) 2,3,6,5,8
答案:C
解析:本题只要了解快排的思想即可选出正确答案。设某数据结构的二元组形式表示为A=(D,R),D={01,02,03,04,05,06,07,08,09},R={r},r={<01,02>,<01,03>,<01,04>,<02,05>,<02,06>,<03,07>,<03,08>,<03,09>},则数据结构A是( )。
(A) 线性结构 (B) 树型结构 (C) 物理结构 (D) 图型结构
答案:B
解析:根据r可知是一对多的关系,并且画出图来便可看出是树型结构。下面程序的时间复杂为( )
for(i=1,s=0; i<=n; i++) {t=1;for(j=1;j<=i;j++) t=t*j;s=s+t;}
(A) O(n) (B) O(n^2) (C) O(n^3) (D) O(n^4)
答案:B
解析:双重for循环,其时间复杂度显然为O(n^2)。设指针变量p指向单链表中结点A,若删除单链表中结点A,则需要修改指针的操作序列为( )。
(A) q=p->next;p->data=q->data;p->next=q->next;free(q);
(B) q=p->next;q->data=p->data;p->next=q->next;free(q);
(C) q=p->next;p->next=q->next;free(q);
(D) q=p->next;p->data=q->data;free(q);
答案:A
解析:这个删除结点的方法很奇妙~.~ 其操作是将要删除结点(A)的后一个结点(B)的数据赋给要删除的结点(A),再删除(B),就相当于删除了结点A设有n个待排序的记录关键字,则在堆排序中需要( )个辅助记录单元。
(A) 1 (B) n (C) nlog2n (D) n2
答案:A
解析:堆排序只需一个辅助记录单元。设一组初始关键字记录关键字为(20,15,14,18,21,36,40,10),则以20为基准记录的一趟快速排序结束后的结果为( )。
(A) 10,15,14,18,20,36,40,21
(B) 10,15,14,18,20,40,36,21
(C) 10,15,14,20,18,40,36,2l
(D) 15,10,14,18,20,36,40,21
答案:A
解析:本题只要了解快排的思想即可选出正确答案。设二叉排序树中有n个结点,则在二叉排序树的平均平均查找长度为( )。
(A) O(1) (B) O(log2 n) (C) (D) O(n^2)
答案:B
解析:对于二叉排序树,其平均查找的深度为O(log2 n)设无向图G中有n个顶点e条边,则其对应的邻接表中的表头结点和表结点的个数分别为( )。
(A) n,e (B) e,n (C) 2n,e (D) n,2e
答案:D
解析:任何一条边都可以引入两个表节点设某强连通图中有n个顶点,则该强连通图中至少有( )条边。
(A) n(n-1) (B) n+1 (C) n (D) n(n+1)
答案:C
解析:首先我们应该知道强连通图是指有向图中任意两点之间都有路径,所以最少情况是这n个点构成一个环.设有5000个待排序的记录关键字,如果需要用最快的方法选出其中最小的10个记录关键字,则用下列( )方法可以达到此目的。
(A) 快速排序 (B) 堆排序 (C) 归并排序 (D) 插入排序
答案:B
解析:达到局部有序的最快的方法是堆排序。下列四种排序中( )的空间复杂度最大。
(A) 插入排序 (B) 冒泡排序 (C) 堆排序 (D) 归并排序
答案:D
解析:对于这四种排序方式的空间复杂度,可以知道其各自所需的辅助存储风别为:
插入排序(O(1)),冒泡排序(O(1)),堆排序(O(1)),归并排序(O(n))设一维数组中有n个数组元素,则读取第i个数组元素的平均时间复杂度为( )。
(A) O(n) (B) O(nlog2 n) (C) O(1) (D) O(n^2)
答案:C
解析:数组作为随机访问的数据结构,并且其可以通过下标访问元素,则其读取的平均时间复杂度为O(1)。设一棵二叉树的深度为k,则该二叉树中最多有( )个结点。
(A) 2k-1 (B) 2^k (C) 2^(k-1) (D) 2^k-1
答案:D
解析:对于一棵深度为k的二叉树来说,其最多有2^k-1个结点,其第k层最大结点数为2^(k-1)个。