数据结构课程复习纲要
核心知识点
- 从数据结构的逻辑结构、存储结构和数据的运算三个方面去掌握线性表、栈、队列、串、数据、广义表、数和图等常用的数据结构。
- 掌握在各种常用的数据结构上实现的排序和查找运算。
- 对算法的时间和空间复杂度有一定的分析能力。
- 针对简单的应用问题,能选择合适的数据结构与设计有效的算法解决问题。
一、单选题
1.二叉树的第k层的结点最多为( D)
A、2k-1 B、2k+1 C、2k-1 D、2k-1
2.以下数据结构中哪一个是非线性结构(D )
A.队列B、栈
C、线性表D、二叉树
3.在数据结构中,从逻辑上可以把数据结构分成( C)
A. 动态结构和静态结构
B. 紧凑结构和非紧凑结构
C. 线性结构和非线性结构
D. 内部结构和外部结构
4.栈和队列的共同特点是( A)
- 只允许在端点处插入和删除元素
B、都是先进后出
C、都是先进先出
D、没有共同点
5.如果二叉树T2是由一棵树T1转换而来的二叉树,那么T1结点的先根遍历序列对应T2的(A ) 序列。
A.先序遍历
B.中序遍历
C.层次遍历
D.后序遍历
6.给定一棵树的二叉链表存储结构,把这棵树转换为二叉树后,这棵二叉树的形态是(A )。
A.唯一的
B.有多种,但根结点都没有右孩子
C.有多种,但根结点都没有左孩子
D.有多种
7.与单链表相比,双链表(C )
- 可随机访问表中结点
- 访问前后结点更为便捷
- 执行插入、删除操作更为简单
- 存储效率更高
8.循环队列存储在长度为m+1数组中,则入队时的操作为( D)
A、rear=rear+1 B、rear=(rear+1)%(m-1)
C、rear=(rear+1)%m D、rear=(rear+1)%(m+1)
9.对于顺序存储的线性表,访问元素和插入元素的时间复杂度分别为(C )
A、O(n) O(n) B、O(n) O(1)
C、O(1) O(n) D、O(1) O(1)
10.基于中序线索化链表,其头结点指针为head,对应的二叉树为空的判断条件是(C )。
A.head->ltag==0
B.head==NULL
C.head->lchildhead && head->rchildhead
D.head->rtag==1
11.讨论树、森林和二叉树的关系,目的是(D )。
A.只是为了方便定义树、森林的遍历方法
B.将树、森林转化成二叉树,统一逻辑表示形式
C.体现一种技巧,没有什么实际意义
D.将树、森林按二叉树的存储结构进行存储,并利用二叉树的算法解决树与森林的有关问题
12.适用于折半查找的表的存储方式及元素排列要求为(D )
A、链接方式存储,元素无序 B、链接方式存储,元素有序 C、顺序方式存储,元素无序D、顺序方式存储,元素有序
13.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数为(B )
A、9 B、11 C、15 D、不确定
14.用13个权值构造哈夫曼树,则该哈夫曼树共有( D) 个结点。
A.26 B.13 C.12 D.25
15.对n(n≧2)个权值不同的字符依哈夫曼算法构造哈夫曼树,下面关于该哈夫曼树的叙述中错误的是( B) 。
A.树中一定没有度为1的结点
B.该树一定是一棵完全二叉树
C.树中两个权值最小的结点一定是兄弟结点
D.树中任何一个非叶结点的权值一定不小于下一层任意一个结点的权值
16.具有10个叶子结点的二叉树中有(B )个度为2的结点
A、8 B、9 C、10 D、11
17.一组记录的关键码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为(A )
A、(40,38,46,56,79,84)
B、(40,38,46,79,56,84)
C、(38,40,46,56,79,84)
D、(40,38,46,84,56,79)
18.将下图所示的二叉树按中序线索化,结点c的左指针与结点h的右指针分别指向( A)。
A.a, g B.a, c C.h, g D.g, c
19.二叉树线索化后,仍不能有效求解的问题是(D ) 。
A.中序线索二叉树中求中序前驱
B.中序线索二叉树中求中序后继
C.先序线索二叉树中求先序后继
D.后序线索二叉树中求后序后继
20.关键路径是AOE网中(A )
- 从源点到汇点的最长路径
- 从源点到汇点的最短路径
- 最长回路
- 最短路径(从源点到汇点的所有路径中,经过弧的数目最多的路径)
21.就平均性能而言,目前最好的内部排序方法是(D )
A、冒泡排序B、希尔排序
C、堆排序D、快速排序
22.最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是(B )
A、(rear+1)%n == front B、rear == front
C、rear+1 == front D、(rear-1)%n == front
23.设栈的输入序列是1,2,3,4则( D)不可能是其出栈序列
A、1,2,4,3 B、2,1,3,4
C、1,4,3,2D、4,3,1,2
24.顺序表比链表的存储密度更大,是因为(B )
- 顺序表的存储空间是预先分配的
- 顺序表不需要增加指针来表示元素之间的逻辑关系
- 链表的所有结点是连续的
- 顺序表的存储空间是不连续的
25.用顺序存储的方法将n个结点的完全二叉树中所有结点按层逐个依从左至右的次序存放在一维数组R[1:n]中,若结点R[i]有左孩子,则左孩子是(B ) 。
A.R[2i+2] B.R[2i] C.R[2i-1] D.R[2i+1]
26.一棵深度为k且只有k个结点的二叉树按照完全二叉树顺序存储的方式存放于一个一维数组R[n]中,则n至少是(C )才能确保正确存储。
A.2k B.2k+1 C. 2k-1 D. 2k
27.以下存储结构中,不是树的存储结构是 ( C) 。
A.孩子兄弟链表 B.双亲表示法
C.广义表D.孩子链表存储结构
28.对线性表,下列哪种情况下应当采用链表表示(B )
- 经常需要随机地存储元素
- 经常需要进行插入和删除操作
- 表中元素需要占据一片连续的存储空间
- 表中元素的个数不变
29.边远山区的N个小村庄,现要为他们建成能互相通信的网,并且总的花费最少,这可以归结为什么问题(D )
A、最短路径B、关键路径
C、拓扑排序D、最小生成树
30.二叉树采用二叉链表存储结构存储,根指针为t,下列递归算法求其叶子结点的个数, 算法的画线处应填的语句是(B )。
A.t->lchild == NULL && t->rchild != NULL
B.t->lchild == NULL && t->rchild == NULL
C.t->lchild == NULL
D.t->rchild == NULL
31.判断线索二叉链表中*p结点有右孩子结点的条件是( D)。
A.p->rchild!=NULL
B.p->rtag==1
C.p!=NULL
D.p->rtag==0
32.设有6个结点的无向图,该图至少应有( A)条边才能确保是一个连通图。
A、5 B、6 C、7 D、8
33.下列关于AOE网的叙述中,不正确的是(B )
- 关键活动不按期完成就会影响整个工程的完成时间
- 任何一个关键活动提前完成,那么整个工程将会提前完成。
- 所有的关键活动提前完成,那么整个工程将会提前完成。
- 某些关键活动提前完成,那么整个工程将会提前完成。
二、判断题
- 在二叉排序树中,根结点的值都小于孩子结点的值。( F )
- 对链表进行插入和删除操作时不必移动链表中结点。( T )
- 链栈与顺序栈相比,其特点之一是通常不会出现栈满的情况。( T )
- 中序遍历一棵二叉排序树可以得到一个有序的序列。( T )
- 堆是完全二叉树,完全二叉树不一定是堆。( T )
- 有回路的有向图不能完成拓扑排序。( T )
- 树有先根遍历与中根遍历两种遍历方法。( T )
- 树的孩子兄弟表示法是一种二叉链表表示法。( T )
- 在哈夫曼树中,权值较大的叶子结点一般离根结点较远。( F )
- 在哈夫曼编码中,当两个不同字符出现的频率相同时,其编码也相同。( F )
- 对于任何待排序序列来说,快速排序均快于冒泡排序。( F )
- 满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树。( T )
- 线性表的链式存储结构既方便其存取操作,也方便其插入与删除操作。( F )
- 一棵满二叉树中每棵子树都是完全二叉树。( T )
- 用二叉树的先序序列和后序序列可以导出它的中序序列。( F )
- 在某种遍历的线索二叉链表中,进行这种遍历时可以直接沿所有右指针一直搜索下去,从而访问所有结点。( F )
- 可以不用栈实现基于中序线索二叉链表对二叉树进行中序遍历。( T )
- 将一棵含有两个以上结点的树转换成二叉树后,该二叉树的根结点没有左子树。 ( F )
- 二叉树的第i层上一定有2 i -1个结点。( F )
- 算法分析的两个主要方面是时间复杂度和空间复杂度的分析。( T )
- 栈和队列也是线性表。如果需要,可对它们中的任一元素进行操作。( F )
- 线性表的链式存储结构一定优于顺序存储结构。( F )
- 单链表可以实现随机存取。( F )
- 2、在单链表中,要访问某个结点,只要知道该结点的地址即可;因此,单链表是一种随机存取结构。( F )
- 3、以链表作为栈的存储结构,出栈操作必须判别栈空的情况。( T )
三、填空题
- 链表相对于顺序表的优点是插入删除结点的时间复杂度为O(1)
- 程序段"i=1;while(i<=n) i=i*2;"的时间复杂度为O(n)
- 数据结构的四种基本类型中, 图 的元素是一对多关系。
- 一个算法的时间复杂度为(n3+n2log2n+14n)/n2,其数量级表示为 O(n^3)
5.设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5,e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1,则栈的容量至少应该是3 。
6.一个循环队列Q的存储空间大小为M,其队头和队尾指针分别为front和rear,则循环队列中元素的个数为:(rear-front+M) % M 。
7.在具有n个元素的循环队列中,队满时具有n - 1 个元素。
8.设循环队列的容量为70,现经过一系列的入队和出队操作后,front为20,rear为11,则队列中元素的个数为61 。
- 两个串相等的充分必要条件是两个串的长度相等且对应位置上的字符相等 。
- 求子串在主串中首次出现的位置的运算称为 模式匹配 。