数据结构第2阶段练习题
- 格式:doc
- 大小:212.00 KB
- 文档页数:6
数据结构课程第二章部分习题解答第二章数组2-1 设n个人围坐在一个圆桌周围,现在从第s个人开始报数,数到第m个人,让他出局;然后从出局的下一个人重新开始报数,数到第m个人,再让他出局,……,如此反复直到所有的人全部出局为止。
下面要解决的Josephus问题是:对于任意给定的n, s和m,求出这n个人的出局序列。
请以n = 9, s= 1, m= 5为例,人工模拟Josephus的求解过程以求得问题的解。
【解答】出局人的顺序为5, 1, 7, 4, 3, 6, 9, 2, 8。
2-2 试编写一个求解Josephus问题的函数。
用整数序列1, 2, 3, ……, n表示顺序围坐在圆桌周围的人,并采用数组表示作为求解过程中使用的数据结构。
然后使用n = 9, s = 1, m = 5,以及n = 9, s = 1, m = 0,或者n = 9, s = 1, m = 10作为输入数据,检查你的程序的正确性和健壮性。
最后分析所完成算法的时间复杂度。
【解答】函数源程序清单如下:void Josephus( int A[ ], int n, s, m ) {int i, j, k, tmp;if ( m== 0 ) {cout<< "m= 0是无效的参数!" << endl;return;}for ( i = 0;i < n;i++ ) A[i] =i + 1;/*初始化,执行n次*/ i = s- 1;/*报名起始位置*/for ( k = n;k > 1;i-- ) {/*逐个出局,执行n-1次*/if ( i ==k ) i = 0;i = ( i + m- 1 ) % k;/*寻找出局位置*/if ( i != k-1 ) {tmp = A[i]; /*出局者交换到第k-1位置*/for ( j = i;j < k-1;j++ )A[j] = A[j+1];A[k-1] = tmp;}}for ( k = 0;k < n / 2;k++ ) {/*全部逆置, 得到出局序列*/tmp= A[k];A[k] = A[n-k+1];A[n-k+1] = tmp;}}例:n = 9, s = 1, m = 50 1 2 3 4 5 6 7 8第4局, i= 2 k第3人出局, i= 1 k第6人出局, i= 1 k第9人出= 2 k第2人出局, i= 0第8人出局, i= 0最终出局顺序例:n = 9, s = 1, m = 0报错信息m= 0是无效的参数!例:n = 9, s = 1, m = 100 1 2 3 4 5 6 7 8第1人出局, i= 0第3人出局, i= 1第6人出局, i = 3 第2人出局, i = 0 第9人出局, i = 4k第5人出局, i = 1 第7人出局, i = 1k第4人出局, i= 0第8人出局, i= 0最终出局顺序当m= 1时,时间代价最大。
)。
第2章线性表1 .选择题(1)顺序表中 第一个 元素的存储 地址是100,每个元素的 长度为2,则第5个元素的 地址是( )。
A . 110 答案:B 解释:顺序表中的数据连续存储,所以第D . 120 5个元素的地址为: 100+2*4=108。
(3)向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移 动的元素个数为( )。
C . 63 A . 8 B . 答案:B 解释:平均要移动的元素个数为: (4) 链接存储的存储结构所占存储空间(n/2。
)。
A .分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针 B .只有一部分,存放结点值C .只有一部分,存储表示结点间关系的指针D .分两部分,一部分存放结点值,另一部分存放结点所占单元数答案:A(5) 线性表若采用链式存储结构时,要求内存中可用存储单元的地址(A .必须是连续的C . 一定是不连续的答案:D(6) 线性表1在( B •部分地址必须是连续的D •连续或不连续都可以)情况下适用于使用链式结构实现。
B.需不断对L 进行删除插入 D.L 中结点结构复杂A .需经常修改L 中的结点值C . L中含有大量的结点答案:B解释:链表最大的优点在于插入和删除时不需要移动数据,直接修改指针即可。
(7) 单链表的存储密度( )。
A .大于1 B .等于1答案:C 解释:存储密度是指一个结点数据本身所占的存储空间和整个结点所占的存储空间之比,假设单链表一个结点本身所占的空间为 D ,指针域所占的空间为 N ,则存储密度为:D/(D+N),—定小于 1。
(8) 将两个各有 n 个元素的有序表归并成一个有序表,其最少的比较次数是(C •小于1D •不能确定 B . 2n-1 C . 2n D . n-1C . 100答案:A解释:当第一个有序表中所有的元素都小于(或大于)第二个表中的元素,只需 要用第二个表中的第一个元素依次与第一个表的元素比较,总计比较n 次。
《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)【第一章绪论】1. 数据结构是计算机科学中的重要基础知识,它研究的是如何组织和存储数据,以及如何通过高效的算法进行数据的操作和处理。
本章主要介绍了数据结构的基本概念和发展历程。
【第二章线性表】1. 线性表是由一组数据元素组成的数据结构,它的特点是元素之间存在着一对一的线性关系。
本章主要介绍了线性表的顺序存储结构和链式存储结构,以及它们的操作和应用。
【第三章栈与队列】1. 栈是一种特殊的线性表,它的特点是只能在表的一端进行插入和删除操作。
本章主要介绍了栈的顺序存储结构和链式存储结构,以及栈的应用场景。
2. 队列也是一种特殊的线性表,它的特点是只能在表的一端进行插入操作,而在另一端进行删除操作。
本章主要介绍了队列的顺序存储结构和链式存储结构,以及队列的应用场景。
【第四章串】1. 串是由零个或多个字符组成的有限序列,它是一种线性表的特例。
本章主要介绍了串的存储结构和基本操作,以及串的模式匹配算法。
【第五章数组与广义表】1. 数组是一种线性表的顺序存储结构,它的特点是所有元素都具有相同数据类型。
本章主要介绍了一维数组和多维数组的存储结构和基本操作,以及广义表的概念和表示方法。
【第六章树与二叉树】1. 树是一种非线性的数据结构,它的特点是一个节点可以有多个子节点。
本章主要介绍了树的基本概念和属性,以及树的存储结构和遍历算法。
2. 二叉树是一种特殊的树,它的每个节点最多只有两个子节点。
本章主要介绍了二叉树的存储结构和遍历算法,以及一些特殊的二叉树。
【第七章图】1. 图是一种非线性的数据结构,它由顶点集合和边集合组成。
本章主要介绍了图的基本概念和属性,以及图的存储结构和遍历算法。
【总结】1. 数据结构是计算机科学中非常重要的一门基础课程,它关注的是如何高效地组织和存储数据,以及如何通过算法进行数据的操作和处理。
本文对《数据结构》第二版严蔚敏的课后习题作业提供了参考答案,涵盖了第1-7章的内容。
试卷B一、选择题(本题共20分,每题2分)1.在数据结构中,从逻辑上可以把数据结构分成( ) 。
A .动态结构和静态结构 B. 线性结构和非线性结构 C. 紧凑结构和非紧凑结构 D. 内部结构和外部结构 2. 下列程序段的时间复杂度是( )count=0;for(k=1;k<=n;k*=2) for(j=1;j<=n;j++) count++;A.O(nlog2n)B.O(n)C.O(log2n)D.O(n2) 3. 以下描述错误的是:( )A. 线性表是n 个数据元素的有限非空集合。
B. 栈和队列都是操作受限的线性表。
C. 串(或字符串)是由零个或多个字符组成的有限序列。
D. 非空栈中的栈顶指针top 始终指向栈顶元素的下一个位置。
4. 若采用少用一个队列空间的方法来区分队满队空两种状态,则判定一个顺序循环队列 Q (最大队列长度MAXSIZE )为满队列的条件是( )。
A. Q.front=Q.rearB. Q.front!=Q.rearC. Q.front=(Q.rear+1) % MAXSIZED. Q.front!=(Q.rear+1) % MAXSIZE 5. 按照二叉树的定义,具有 3 个结点的二叉树有( )种。
A. 3 B. 4 C. 5 D. 66. 设矩阵A (如下图所示)是一个对称矩阵,为了节省存储,将其下三角(包括对角线)部分按行序存放在一维数组 B[n(n+1)/2]中,对下三角部分中任一元素 ai,j(i ≥j),在一维数组 B 的下标位置k 的值是( )。
A. i(i-1)/2+j-1 B. i(i-1)/2+j C. i(i+1)/2+j-1 D. i(i+1)/2+j0,01,01,11,01,11,1...............n n n n a a a A a a a ----⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦7. 有一个有序表为{5, 18,23, 33, 42, 54,56,78},当折半查找56时,经过( )次比较后查找成功。
数据结构(C语言版)(第2版)课后习题答案李冬梅目录第1章绪论............................................. 错误!未定义书签。
第2章线性表........................................... 错误!未定义书签。
第3章栈和队列......................................... 错误!未定义书签。
第4章串、数组和广义表................................. 错误!未定义书签。
第5章树和二叉树....................................... 错误!未定义书签。
第6章图................................................ 错误!未定义书签。
第7章查找............................................. 错误!未定义书签。
第8章排序............................................. 错误!未定义书签。
第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据结构-阶段测评11.单选题计算机识别、存储和加工处理的对象被统称为(A )您答对了a数据b数据元素c数据结构d数据类型本题考核数据的基本概念非空的循环单链表head的尾结点(由p所指向)满足(C)。
您答对了ap->next==NULLbp==NULLcp->next==headdp==head本题考核循环单链表的基本特点。
若长度为n的线性表采用顺序存储结构存储,在第i个位置上插入一个新元素的时间复杂度为(A)。
您答对了aO(n)bO(1)cO(n2)dO(n3)本题考核顺序表的插入运算的时间复杂度。
下面程序段中a[i][j]=0语句执行的时间复杂度是( D)。
for(i=0;i<n;i++)for(j=1;j<m;j++)a[i][j]=0;您答对了aO(n)bO(m+n+1)cO(m+n)dO(m*n)本题考核时间复杂度的计算方法在一个具有n个结点的有序单链表中插入一个新结点并保持单链表仍然有序的时间复杂度是(B)。
您答对了aO(1)bO(n)cO(n2)dO(nlog2n)因要保持有序,所以需要查找插入结点的位置,而在链表中查找结点位置的时间复杂度为O(n),所以本题选B。
在一个长度为n的顺序表中删除第i个元素(1<=i<=n)时,需向前移动(A)个元素。
您答对了an-ibn-i+1cn-i-1di考核顺序表的基本操作设顺序表有10个元素,则在第5个元素前插入一个元素所需移动元素的个数为( B)。
您答对了a5b6c7d9在第5个元素前插入元素需要将第5个元素开始的所有元素后移,所以本题答案为B。
算法指的是(D )。
您答对了a计算机程序b解决问题的计算方法c排序算法d解决问题的有限运算序列考核算法的基本概念线性表采用链式存储时,结点的存储地址(B )您答对了a必须是不连续的b连续与否均可c必须是连续的d和头结点的存储地址相连续链式存储分配的结点在内存连续与不连续均可,所以答案选B。
数据结构与算法上机作业第二章线性表一、选择题1、若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新的元素算法的时间复杂度为。
A. O(log2n)B. O(1)C. O(n)D. O(n2)2、以下关于线性表的说法中,不正确的是。
A. 线性表中的数据元素可以是数字、字符、结构等不同类型B. 线性表中包含的数据元素个数不是任意的C.线性表中的每一个结点都有且只有一个直接前驱和直接后继(单项链表)D.存在这样的线性表:表中各结点都没有直接前驱和直接后继(数组实现)3、在有n个结点的顺序表上做插入、删除结点运算的时间复杂度为。
A. O(1)B. O(n)C. O(n2)D. O(log2n)4、等概率情况下,在有n个结点的顺序表上做插入结点操作,需平均移动的结点数目为。
A. nB. (n-1)/2C. n/2D. (n+1)/2已经有N个点了,再加一个就是N+1个.假设新加的结点插在第i位,那么后面N+1-i个结点都要往后移动.i的取值服从1到N+1的平均分布,即概率是1/(N+1).求期望得N/2,即平均要移动N/2个结点期望有计算公式,这里等于(N+1-1)*1/(N+1)+(N+1-2)*1/(N+1)+(N+1-3)*1/(N+1)+...+(N+1-N-1)*1/(N+1)=N/25、在一个长度为n的顺序存储的线性表中查找值为x的元素时,平均查找长度(及x同元素的平均比较次数,假定查找每个元素的概率都相等)为。
A. nB. n/2C. (n+1)/2D. (n-1)/26、在顺序表中,只要知道,就可以求出任一结点的存储地址。
A. 基地址B. 结点大小C. 向量大小D. 基地址和结点大小7、将两个各有n个元素的有序表归并为一个有序表,其最少的比较次数是。
A. nB. 2n-1C. 2nD. n-18、线性表采用链表存储时其存储地址要求。
A. 必须是连续的B. 部分地址必须是连续的C. 必须是不连续的D. 连续的和不连续的都可以9、下面关于线性表的描述中,错误的是。
数据结构(C语言版)(第2版)课后习题答案数据结构(C语言版)(第2版)课后习题答案1. 简介数据结构是计算机科学领域中非常重要的一门学科,它研究的是数据的组织、存储和管理方式。
本文将针对《数据结构(C语言版)(第2版)》的课后习题提供答案,帮助读者更好地理解和应用数据结构。
2. 第一章: 绪论在第一章中,主要介绍了数据结构的基本概念、分类和基本操作。
以下是部分习题的答案:2.1 习题1习题描述:什么是数据结构?答案:数据结构是指数据对象中元素之间的关系,以及对这些关系进行操作的方法和技术的集合。
2.2 习题2习题描述:数据结构的分类有哪些?答案:数据结构可以分为线性结构和非线性结构。
线性结构包括线性表、栈、队列等;非线性结构包括树、图等。
3. 第二章: 线性表第二章介绍了线性表的定义、分类和实现。
以下是部分习题的答案:3.1 习题1习题描述:什么是线性表?答案:线性表是由n个数据元素a1, a2, ..., an组成的有限序列,其中元素之间存在着一一对应的关系。
3.2 习题2习题描述:线性表的分类有哪些?答案:线性表可以分为顺序表和链表。
顺序表是用一段地址连续的存储单元一次存储线性表的所有元素,而链表是采用链式存储结构,通过每个元素存储其后继元素的地址来实现元素之间的逻辑关系。
4. 第三章: 栈与队列第三章讲解了栈和队列的定义、特性和实现。
以下是部分习题的答案:4.1 习题1习题描述:栈和队列有什么区别?答案:栈是一种后进先出的线性表,只能在表尾进行插入和删除操作;队列是一种先进先出的线性表,只能在表的一端进行插入和删除操作。
4.2 习题2习题描述:栈的应用有哪些?答案:栈在计算机科学中有广泛的应用,如函数的调用和返回、括号匹配、表达式求值等。
5. 第四章: 串第四章讲解了串的定义、模式匹配和实现。
以下是部分习题的答案:5.1 习题1习题描述:什么是串?答案:串是由零个或多个字符组成的有限序列,串中的字符个数称为串的长度。
1
第二阶段练习题
考试科目:《数据结构》第五章至第七章(总分100分)
______________
学习中心(教学点) 批次: 层次:
专业: 学号: 身份证号:
姓名: 得分:
一、选择题(每题3分,共30分)
1、将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1..298]中,则A中的元素
A[66,65]在数组B中的位置K=( )。
A、195 B、196 C、197 D、198
2、广义表(a,(b,(),c))的深度为( )。
A、1 B、2 C、3 D、4
3、下列叙述中错误的是( )。
A、树的度与该树中结点的度的最大值相等 B、二叉树就是度为2的有序树
C、有5个叶子结点的二叉树中必有4个度为2的结点 D、满二叉树一定是完全二叉树
4、一棵二叉树中第6层上最多有( )个结点。
A、2 B、31 C、32 D、64
5、由树转换而得的二叉树,根结点( )。
A、没有左子树 B、没有右子树 C、左右子树都有 D、视树的形态而定
6、一棵高为k的二叉树最少有( )个结点。
A、k-1 B、k C、k+1 D、2k-1 E、2k-1
7、含n个顶点的有向图最多有( )条弧。
A、n B、n(n-1) C、n(n+1) D、n2
8、设对下图从顶点a出发进行深度优先遍历,则( )是可能得到的遍历序列。
A、acfgdeb B、abcdefg C、acdgbef D、abefgcd
2
9、设图G的邻接矩阵A=010101010,则图G中共有( )个顶点。
A、1 B、3 C、4 D、9
10、具有n个顶点的有向强连通图最少有( )条弧。
A、n-1 B、n C、n(n-1) D、n(n-1)/2
二、(10分)
试将下图中的树转化为二叉树。
三、(10分)
试写出对如下无向图从顶点A出发进行广度优先遍历可能得到的所有遍历序列。
四、(15分)
设有向网如下,试用迪杰斯特拉算法求从顶点A出发到其余各顶点的最短路径。
3
五、(15分)
一棵深度为H的满k叉树有如下性质:第H层上的结点都是叶子结点,其余各层上每个结点都有
k棵非空子树。若按层次顺序从1开始对全部结点编号,则:
⑴第i层上有多少个结点?
⑵编号为p的结点的第i个孩子结点(若存在)的编号是多少?
⑶编号为p的结点的双亲结点(若存在)的编号是多少?
六、(20分)
试设计算法,对以邻接矩阵存储的无向图进行深度优先遍历。
答案
一、选择题
1、A
2、C
3、B
4、C
5、B
6、B
7、B
8、A
9、B
10、B
4
二、
试将下图中的树转化为二叉树。
答:
三、
试写出对如下无向图从顶点A出发进行广度优先遍历可能得到的所有遍历序列。
5
答:
ABCEGHFD
ABCEHGFD
ACBGHEDF
ACBHGEDF
四、
设有向网如下,试用迪杰斯特拉算法求从顶点A出发到其余各顶点的最短路径。
答:
D PATH D PATH D PATH D PATH
A 0 / 0 / 0 / 0 /
B 1 ∞ 1 ∞ 1 10 ACDB 1 8 ACDEB
C 2 2 AC 2 / AC 2 / AC 2 / AC
D 3 7 AD 3 5 ACD 3 / ACD 3 / ACD
E 4 ∞ 4 ∞ 4 6 ACDE 4 / ACDE
F 5 ∞ 5 6 ACF 5 6 ACF 5 6 ACF
G 6 ∞ 6 ∞ 6 13 ACDG 6 13 ACDG
D PATH D PATH D PATH
A 0 / 0 / 0 /
B 1 8 ACDEB 1 / ACDEG 1 / ACDEG
C 2 / AC 2 / AC 2 / AC
D 3 / ACD 3 / ACD 3 / ACD
E 4 / ACDE 4 / ACDE 4 / ACDE
F 5 / ACF 5 / ACF 5 / ACF
G 6 12 ACFG 6 10 ACFGE 6 / ACFGE
五、
一棵深度为H的满k叉树有如下性质:第H层上的结点都是叶子结点,其余各层上每个结点
都有k棵非空子树。若按层次顺序从1开始对全部结点编号,则:
6
⑴第i层上有多少个结点?
⑵编号为p的结点的第i个孩子结点(若存在)的编号是多少?
⑶编号为p的结点的双亲结点(若存在)的编号是多少?
答:
⑴第1层有1个结点,第i层结点数=第i-1层结点数*k(2≤i≤H)=1ik个
⑵当根结点以及前面的p-1个结点的孩子都编了号之后,才开始为结点p的孩子编号。结点p的
第i个孩子的编号为(1+(p-1)*k)+i。
⑶若p=1,则为根结点,无双亲,否则可设双亲结点编号为s,由⑵可知结点s的孩子结点的
编号范围为(s-1)*k+2~(s-1)*k+k+1,即kkpskp21,又由s
为整数,可得kkps2。
六、
试设计算法,对以邻接矩阵存储的无向图进行深度优先遍历。
答:
int depth(BiTree t){
if (!t) return 0;
if(t->lchild)//有左子树
if (t->rchild){ //左、右子树均有
hl=depth(t->lchild); //求左子树高度
hr=depth(t->rchild); //求右子树高度
return hl>hr?hl+1:hr+1;
}
else //只有左子树
return depth(t->lchild)+1;
else //无左子树
return depth(t->rchild)+1;
//有右子树,则返回右子树高度加1
//无右子树,即右子树高度为0,则返回1
}//depth