1、复习题(一)一、填空题1、数据结构可以定义为一个两元组(D,S),其中 D 是数据元素的有限集,S 是 的有限集。2、在线性表中,线性表的长度指的是 。3、栈中元素的进出原则为 _。4、深度为 k 的二叉树其结点数至多有 个。5、一棵深度为 6 的满二叉树有_个非终端结点。6、若一棵二叉树中有 8 个度为 2 的结点,则它有_个叶子。7、设数组 A110,18的基地址为 2000,每个元素占 2 个存储单元,若以行序 8、为主序顺序存储,则元素 A4,5的存储地址为_;若以列序为主序顺序存储,则元素 A4,5的存储地址为_。9、哈希表是一种查找表,可以根据哈希函数直接获得 。10、在单链表中,
2、删除指针 P 所指结点的后继结点的语句是: 。11、有向图 G 用邻接矩阵 A1n,1n 存储表示,其第 i 行的所有元素之和等于顶点 i 的 。12、在一个单链表 p 所指结点之后插入一个 s 所指结点时,应执行 snext=_和 pnext=_的操作。13、设有 33 个值,用它们组成一棵哈夫曼树,则该哈夫曼树中共有_个结点。14、设需将一组数据按升序排序。在无序区中依次比较相邻两个元素 ai和 ai+1的值,若 ai的值大于 ai+1的值,则交换 ai和 ai+1。如此反复,直到某一趟中没有记录需要交换为止,该排序方法被称为_。15、数据结构在计算机中的表示称为数据的 。16、一棵含 9
3、99 个结点的完全二叉树的深度为_。17、广义表的深度是指_。18、称算法的时间复杂度为 O(f(n),其含义是指算法的执行时间和_的数量级相同。19、在一个长度为 n 的单链表 L 中,删除链表中*p 的前驱结点的时间复杂度为_。20、在队列中,允许插入元素的一端称为_。二、判断题1、只允许在表的一端进行插入和删除操作的线性表称为堆栈。 ( )2、没有元素的堆栈称为空栈,空栈用不着栈顶指针。 ( )3、二叉树的度一定为 2。 ( )4、满二叉树一定是完全二叉树。 ( )5、在完全二叉树中,没有右孩子的结点一定是叶结点。 ( )6、在所有深度相同的二叉树中,满二叉树具有最大结点数目。 ( )7
4、、给定一组权值,构造出来的哈夫曼树是惟一的。 ( )8、对图进行深度优先搜索的过程中要用到堆栈。 ( )9、若表示某图的邻接矩阵中出现了全零行或者全零列,则该图一定是非连通图或者非强连通图。 ( )10、连通图的最小生成树是惟一的。 ( )11、若一棵二叉树的任一非叶子结点度为 2,则该二叉树为满二叉树。( )12、在队满情况下不能作入队处理,否则,将产生“上溢”。( )13、在栈为空的情况下不能作出栈处理,否则,将产生下溢出。( )14、一个有向图的邻接表和逆邻接表中的结点个数不一定相等。( )15、线性表中的每个结点最多只有一个前驱和一个后继。 ( )16、单链表从任何一个结点出发,都能访
5、问到所有结点 ( )17、单链表形式的队列,头指针 F 指向队列的第一个结点,尾指针 R 指向队列的最后一个结点。( )18、若表示某图的邻接矩阵中出现了全零行或者全零列,则该图一定是非连通图或者非强连通图。 ( )19、设串 S 的长度为 n,则 S 的子串个数为 n(n+1)/2。 ( ) 20、一般树和二叉树的结点数目都可以为 0。 ( )三、选择题1、栈和队列都是( )A限制存取位置的线性结构 B顺序存储的线性结构C链式存储的线性结构 D限制存取位置的非线性结构2、不带头结点的单链表 head 为空的判定条件是( )Ahead=NULL Bhead - next=NULLChead-
6、next=head Dhead!=NULL3、非空的循环单链表 head 的尾结点(由 p 所指向)满足( )Ap next=NULL Bp=NULLCp next=head Dp=head4、在一个单链表中,若 p 所指结点不是最后结点,在 p 之后插入 s 所指结点,则执行( )As next =p;pnext=s; Bs next =pnext;pnext=s;Csnext =pnext;p =s; Dpnext =s;snext=p;5、判定一个栈 ST(最多元素为 m0)为栈满的条件是( ) 。A. ST-top!=0 B.ST-top=0C.ST-top!=m0 D.ST-top=
7、m06、若堆栈采用顺序存储结构,正常情况下,往堆栈中插入一个元素,栈顶指针 top 的变化是()A不变 Btop=0 Ctop- Dtop+7、广义表(a,(b,( ),c),(d,(e)的深度是_。A.5 B.4 C.3 D.28、当在二叉排序树中插入一个新结点时,若树中不存在与待插入结点的关键字相同的结点,且新结点的关键字小于根结点的关键字,则新结点将成为( )A左子树的叶子结点 B左子树的分支结点C右子树的叶子结点 D右子树的分支结点9、对一棵二叉排序树进行遍历,可以得到该二叉树的所有结点按值从小到大排列的序列。A前序 B中序 C后序 D按层次10、对于顺序存储的队列,存储空间大小为 n
8、,头指针为 F,尾指针为 R。若在逻辑上看一个环,则队列中元素的个数为( )A.R-F B.n+R-F C.(R-F+1)mod n D.(n+R-F)mod n11算法分析的目的是( )A辨别数据结构的合理性B评价算法的效率C研究算法中输入与输出的关系D鉴别算法的可读性12在线性表的下列运算中,不改变数据元素之间结构关系的运算是( )A插入 B删除C排序 D定位13若进栈序列为 1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为( )A3,2,6,1,4,5 B3,4,2,1,6,5C1,2,5,3,4,6 D5,6,4,2,3,114设串 sl=Data Struct
9、ures with Java,s2=it,则子串定位函数 index(s1,s2)的值为( )A15 B16C17 D1815二维数组 A89按行优先顺序存储,若数组元素 A23的存储地址为 1087,A47的存储地址为 1153,则数组元素 A67的存储地址为( )A1207 B1209C1211 D121316在按层次遍历二叉树的算法中,需要借助的辅助数据结构是( )A队列 B栈C线性表 D有序表17在任意一棵二叉树的前序序列和后序序列中,各叶子之间的相对次序关系( )A不一定相同 B都相同C都不相同 D互为逆序18若采用孩子兄弟链表作为树的存储结构,则树的后序遍历应采用二叉树的( )A层
10、次遍历算法 B前序遍历算法C中序遍历算法 D后序遍历算法19若用邻接矩阵表示一个有向图,则其中每一列包含的1的个数为( )A图中每个顶点的入度 B图中每个顶点的出度C图中弧的条数 D图中连通分量的数目20图的邻接矩阵表示法适用于表示( )A无向图 B有向图C稠密图 D稀疏图21在对 n 个关键字进行直接选择排序的过程中,每一趟都要从无序区选出最小关键字元素,则在进行第 i 趟排序之前,无序区中关键字元素的个数为( )Ai Bi+1Cn-i Dn-i+122下列排序算法中,其时间复杂度和记录的初始排列无关的是( )A插入排序 B堆排序C快速排序 D冒泡排序23若有序表的关键字序列为(b,c,d,
11、e,f,g,q,r,s,t),则在二分查找关键字 b 的过程中,先后进行比较的关键字依次为( )Af,c,b Bf,d,bCg,c,b Dg,d,b24. 若线性表最常用的操作是存取第 i 个元素及其前驱元素的值,则采用 存储方式最节省运算时间。A. 单链表 B. 双链表 C. 单循环链表 D. 顺序表25. 折半查找法要求查找表中各元素的键值必须是 。A. 递增或递减 B. 递增 C. 递减 D. 无序四、简答题1、已知二叉树的先序序列和中序序列分别为 HDACBGFE 和 ADCBHFEG。(1)画出该二叉树;(2)画出与(1)求得的二叉树对应的森林。2、已知带权图的邻接表如下所示,其中边
12、表结点的结构为:依此邻接表从顶点 C 出发进行深度优先遍历。(1)画出由此得到的深度优先生成树;(2)写出遍历过程中得到的从顶点 C 到其它各顶点的带权路径及其长度。3、已知稀疏矩阵 A65如下所示,请写出它的三元组表表示。 00986704510A4、分别描述线性表的 2 种存储结构,并简述插入、删除操作的算法思想。5、给定一组权值 W=14,15,7,3,20,4,请构造出相应的哈夫曼树,并计算其带权的路径长度 WPL。6、试按表( 10,8,9,12,20,5,6,15,19,25 )中元素的排列次序, 将所有元素插入一棵初始为空的二叉排序树中, 使之仍是一棵二叉排序树。(1)试画出插入
13、完成之后的二叉排序树;(2)若查找元素 17,它将依次与二叉排序树中哪些元素比较大小?(3)对该树进行中序遍历,试写出中序遍历序列。7、 写出采用顺序方式存储的栈的类型描述及相应的入栈、出栈操作的示意图。8、已知数据表为(60,20,31,5,44,55,61,30,80,150,4,29),写出采用希尔排序算法进行排序的详细过程和结果(假设增量序列 dlta =6,3,1)。9、已知一棵二叉树的先序、中序和后序序列如下所示,请填写各序列中空格处的结点,并画出该二叉树的二叉链表存储结构示意图。先序序列是:_ B _ F _ I C E H _ G; 中序序列是:D _ K F I A _ E
14、J C _ ;后序序列是:_ K _ F B H J _ G _ A10、已知数据表为(48,70,33,65,24,56,12,92,86,22),a) 写出采用快速排序算法进行排序时第一趟快速划分的详细过程及结果;b) 写出按基数排序思想对最低位进行一次分配和收集的结果。五、算法题1、设 n 个元素的线性表顺序存储在一维数组 st1maxlen 的前 n 个位置上,试写出算法:删除表中第 i(1in)个元素。2、已知用有序链表存储整数集合的元素。阅读算法 f30,并回答下列问题:(1)写出执行 Function(a,b)的返回值,其中 a 和 b 分别为指向存储集合2,4,5,7,9,12
15、和2,4,5,7,9的链表的头指针;(2)简述算法 Function 的功能;(3)写出算法 Function 的时间复杂度。int Function (LinkList ha,LinkList hb)/LinkList 是带有头结点的单链表/ha 和 hb 分别为指向存储两个有序整数集合的链表的头指针LinkList pa,pb;pa=ha-next;pb=hb-next;while(pa pb=pb-next;if(pa=NULL else return 0;3、 设计算法将一个带头结点的单循环链表 A 分解为两个具有相同结构的链表 B、C,其中:B 表中的结点为 A 表中元素的顺序号为奇数的结点,而 C 表中的结点为 A 表中元素的顺序号为偶数的结点。(要求利用原表结点。)4、 已知一棵完全二叉树存于顺序表 sa 中,sa.elem1sa.last 包含各结点值。试编写算法根据此顺序存储结构建立该二叉树的二叉链表 T。5、假设线性表 L=(a1,a2,an) 用带头结点的单链表存储表示,试编写算法对其实现就地逆置,即利用原链表中每一个结点存储空间,使得元素的逻辑次序改变为(an, a2,a1)。