-+串数组树作业(参考答案)
《数据结构》填空作业题答案
《数据结构》填空作业题答案第1章绪论(已校对无误)1.数据结构包括数据的逻辑结构、数据的存储结构和数据的运算三方面的内容。
2.程序包括两个内容:数据结构和算法。
3. 数据结构的形式定义为:数据结构是一个二元组: Data Structure =(D,S)。
4. 数据的逻辑结构在计算机存储器内的表示,称为数据的存储结构。
5. 数据的逻辑结构可以分类为线性结构和非线性结构两大类。
6. 在图状结构中,每个结点的前驱结点数和后继结点数可以有多个。
7. 在树形结构中,数据元素之间存在一对多的关系。
8. 数据的物理结构,指数据元素在计算机中的标识(映象),也即存储结构。
9. 数据的逻辑结构包括线性结构、树形结构和图形结构 3种类型,树型结构和有向图结构合称为非线性结构。
10. 顺序存储结构是把逻辑上相邻的结点存储在物理上连续的存储单元里,结点之间的逻辑关系由存储单元位置的邻接关系来体现。
11. 链式存储结构是把逻辑上相邻的结点存储在物理上任意的存储单元里,节点之间的逻辑关系由附加的指针域来体现。
12. 数据的存储结构可用4种基本的存储方法表示,它们分别是顺序存储、链式存储、索引存储和散列存储。
13. 线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是一对多或多对多。
14. 数据结构在物理上可分为顺序存储结构和链式存储结构。
15. 我们把每种数据结构均视为抽象类型,它不但定义了数据的表示方式,还给出了处理数据的实现方法。
16. 数据元素可由若干个数据项组成。
17. 算法分析的两个主要方面是时间复杂度和空间复杂度。
18. 一个算法的时间复杂度是用该算法所消耗的时间的多少来度量的,一个算法的空间复杂度是用该算法在运行过程中所占用的存储空间的大小来度量的。
19. 算法具有如下特点:有穷性、确定性、可行性、输入、输出。
20. 对于某一类特定的问题,算法给出了解决问题的一系列操作,每一操作都有它的确切的定义,并在有穷时间内计算出结果。
南京晓庄学院数据结构题库参考标准答案
南京晓庄学院数据结构题库参考标准答案数据结构与算法习题册(课后部分参考答案)《数据结构与算法》课程组⽬录课后习题部分第⼀章绪论 (1)第⼆章线性表 (3)第三章栈和队列 (5)第四章串 (8)第五章数组和⼴义表 (10)第六章树和⼆叉树 (13)第七章图 (16)第九章查找 (20)第⼗章排序 (23)第⼀章绪论⼀. 填空题1. 从逻辑关系上讲,数据结构的类型主要分为集合、线性结构、树结构和图结构。
2. 数据的存储结构主要有顺序存储和链式存储两种基本⽅法,不论哪种存储结构,都要存储两⽅⾯的内容:数据元素和数据元素之间的关系。
3. 算法具有五个特性,分别是有穷性、确定性、可⾏性、输⼊、输出。
4. 算法设计要求中的健壮性指的是算法在发⽣⾮法操作时可以作出处理的特性。
⼆. 选择题1. 顺序存储结构中数据元素之间的逻辑关系是由 C 表⽰的,链接存储结构中的数据元素之间的逻辑关系是由 D 表⽰的。
A 线性结构B ⾮线性结构C 存储位置D 指针2. 假设有如下遗产继承规则:丈夫和妻⼦可以相互继承遗产;⼦⼥可以继承⽗亲或母亲的遗产;⼦⼥间不能相互继承。
则表⽰该遗产继承关系的最合适的数据结构应该是B 。
A 树B 图C 线性表D 集合3. 算法指的是 A 。
A 对特定问题求解步骤的⼀种描述,是指令的有限序列。
B 计算机程序C 解决问题的计算⽅法D 数据处理三. 简答题1. 分析以下各程序段,并⽤⼤O记号表⽰其执⾏时间。
(1) (2)i=1;k=0; i=1;k=0;While(i{ {k=k+10*i; k=k+10*i;i++; i++;} }while(i<=n)⑴基本语句是k=k+10*i,共执⾏了n-2次,所以T(n)=O(n)。
⑵基本语句是k=k+10*i,共执⾏了n次,所以T(n)=O(n)。
2. 设有数据结构(D,R),其中D={1, 2, 3, 4, 5, 6},R={(1,2),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6)}。
数据结构(第4版)习题及实验参考答案数据结构复习资料完整版(c语言版)
数据结构(第4版)习题及实验参考答案数据结构复习资料完整版(c语言版)数据结构基础及深入及考试习题及实验参考答案见附录结论1、数据的逻辑结构是指数据元素之间的逻辑关系。
即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
2、数据的物理结构亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。
它依赖于计算机。
存储结构可分为4大类:顺序、链式、索引、散列3、抽象数据类型:由用户定义,用以表示应用问题的数据模型。
它由基本的数据类型构成,并包括一组相关的服务(或称操作)。
它与数据类型实质上是一个概念,但其特征是使用与实现分离,实行封装和信息隐蔽(独立于计算机)。
4、算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的计算步骤。
5、在数据结构中,从逻辑上可以把数据结构分成(C)A、动态结构和表态结构B、紧凑结构和非紧凑结构C、线性结构和非线性结构D、内部结构和外部结构6、算法的时间复杂度取决于(A)A、问题的规模B、待处理数据的初态C、问题的规模和待处理数据的初态线性表1、线性表的存储结构包括顺序存储结构和链式存储结构两种。
2、表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数为(E),删除一个元素需要移动的元素的个数为(A)。
A、(n-1)/2B、nC、n+1D、n-1E、n/2F、(n+1)/2G、(n-2)/23、“线性表的逻辑顺序与存储顺序总是一致的。
”这个结论是(B)A、正确的B、错误的C、不一定,与具体的结构有关4、线性表采用链式存储结构时,要求内存中可用存储单元的地址(D)A、必须是连续的B、部分地址必须是连续的C一定是不连续的D连续或不连续都可以5、带头结点的单链表为空的判定条件是(B)A、head==NULLB、head->ne某t==NULLC、head->ne某t=headD、head!=NULL6、不带头结点的单链表head为空的判定条件是(A)A、head==NULLB、head->ne某t==NULLC、head->ne某t=headD、head!=NULL7、非空的循环单链表head的尾结点P满足(C)A、p->ne某t==NULLB、p==NULLC、p->ne某t==headD、p==head8、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是(B)A、O(1)B、O(n)C、O(n2)D、O(nlog2n)数据结构(第4版)习题及实验参考答案9、在一个单链表中,若删除p所指结点的后继结点,则执行(A)A、p->ne某t=p->ne某t->ne某t;B、p=p->ne某t;p->ne某t=p->ne某t->ne某t;C、p->ne某t=p->ne某t;D、p=p->ne某t->ne某t;10、在一个单链表中,若在p所指结点之后插入所指结点,则执行(B)A、->ne某t=p;p->ne某t=;B、->ne某t=p->ne某t;p->ne某t=;C、->ne某t=p->ne某t;p=;D、p->ne某t=;->ne某t=p;11、在一个单链表中,已知q是p的前趋结点,若在q和p之间插入结点,则执行(C)A、->ne某t=p->ne某t;p->ne某t=;B、p->ne某t=->ne某t;->ne某t=p;C、q->ne某t=;->ne某t=p;D、p->ne某t=;->ne某t=q;12、在线性结构中,第一个结点没有前趋结点,其余每个结点有且只有1个前趋结点。
数组典型例题及参考答案
第7章数组7-1输入一个正整数n(1≤n≤10),再输入n个整数(1)输出最大数和最小数,并输出平均值。
(2)将最小数与第一个数交换,最大数与最后一个数交换,然后输出交换后的结果。
(3)输出所有比平均值大的数。
(4)找到最接近平均值的数。
(提示:考虑差的绝对值)OutputPlease input 10 integers:17 34 -11 2 5 10 7 -9 0 25 /* input */The maximum is: 34, the minimum is: -11, the average is 8.00After exchange: -11 25 17 2 5 10 7 -9 0 34Larger than the average: 25 17 10 34The number closest to the average is: 77-2输入一个日期(按照year-month-day格式),计算该日期为当年的第几天。
(提示:注意闰年)(1)使用数组存储当年每个月应有的天数;(2)不使用数组完成;OutputPlease input a date: (year-month-day) 2008-4-14↵/* input */This date is the 105th day in the year.7-3输入一个正整数n(1≤n≤10),再输入n个整数,将这n个整数从大到小排序,然后在已经排序后的数组中插入平均数(取整),保持数组的升序,将插入平均数后的数组输出。
(1)用冒泡法排序;(2)用选择法排序。
OutputHow many numbers you want to sort? 5↵/* input */Please input 5 numbers:17 34 -11 2 5↵/* input */34 17 9 5 2 -117-4输入两个数组A和B(各5个元素),将其按照升序排序,然后将A和B合并到数组C中(合并的过程中保持升序,不要合并后再排序)。
数据结构第四章串习题及答案
习题四串一、单项选择题1.下面关于串的的叙述中,哪一个是不正确的?()A.串是字符的有限序列 B.空串是由空格构成的串C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储2.串是一种特殊的线性表,其特殊性体现在()。
A.可以顺序存储 B.数据元素是一个字符C.可以链接存储 D.数据元素可以是多个字符3.串的长度是指()A.串中所含不同字母的个数 B.串中所含字符的个数C.串中所含不同字符的个数 D.串中所含非空格字符的个数4.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()A.求子串 B.联接 C.匹配 D.求串长5.若串S=“softwa re”,其子串的个数是()。
A.8 B.37 C.36 D.9二、填空题1.含零个字符的串称为______串。
任何串中所含______的个数称为该串的长度。
2.空格串是指__ __,其长度等于__ __。
3.当且仅当两个串的______相等并且各个对应位置上的字符都______时,这两个串相等。
一个串中任意个连续字符组成的序列称为该串的______串,该串称为它所有子串的______串。
4.INDEX(‘DATAST RUCTU RE’,‘STR’)=________。
5.模式串P=‘abaabc ac’的next函数值序列为________。
6.下列程序判断字符串s是否对称,对称则返回1,否则返回0;如 f("abba")返回1,f("abab")返回0;int f((1)__ ______){int i=0,j=0;while(s[j])(2)___ _____;for(j--; i<j && s[i]==s[j]; i++,j--);return((3)___ ____)}7.下列算法实现求采用顺序结构存储的串s和串t的一个最长公共子串。
数据结构计算题及参考答案
数据结构计算题及参考答案数据结构计算题及参考答案数据结构是计算机科学中的重要概念,它用于组织和管理数据。
在计算机科学的学习过程中,我们经常会遇到一些与数据结构相关的计算题。
这些题目旨在帮助我们加深对数据结构的理解,并提高我们的编程能力。
在本文中,我将为大家提供一些常见的数据结构计算题及其参考答案。
1. 栈的应用题栈是一种具有后进先出(Last In First Out)特性的数据结构。
下面是一个栈的应用题:题目:使用栈判断一个字符串中的括号是否匹配。
解答:我们可以遍历字符串中的每个字符,如果遇到左括号,则将其入栈;如果遇到右括号,则判断栈顶元素是否为对应的左括号,如果是,则将栈顶元素出栈,继续遍历下一个字符;如果不是,则说明括号不匹配。
最后,如果栈为空,则说明字符串中的括号全部匹配,否则不匹配。
2. 队列的应用题队列是一种具有先进先出(First In First Out)特性的数据结构。
下面是一个队列的应用题:题目:使用队列模拟击鼓传花游戏。
解答:我们可以使用队列来模拟击鼓传花游戏。
首先,将所有参与游戏的人依次加入队列。
然后,从队列中取出第一个人,并将其加入队尾。
重复这个过程,直到传花的次数达到指定的次数。
最后,队列中的最后一个人即为被淘汰的人。
3. 链表的应用题链表是一种常见的动态数据结构,它可以在运行时动态分配内存。
下面是一个链表的应用题:题目:反转链表。
解答:我们可以使用迭代或递归的方式来反转链表。
迭代的方法是从链表头开始,依次将每个节点的指针方向反转。
递归的方法是先反转链表的子链表,然后将当前节点的指针指向前一个节点。
最后,将链表的头节点指向反转后的链表的头节点。
4. 树的应用题树是一种非常重要的数据结构,它具有层次结构和分支结构。
下面是一个树的应用题:题目:计算二叉树的深度。
解答:我们可以使用递归的方式来计算二叉树的深度。
对于一个二叉树,它的深度等于左子树的深度和右子树的深度中的较大值加1。
数据结构串和数组的习题答案
补充习题:
8.存取数组中任一元素的时间都是相等的,这种存取方式为 ( )存取方式。
A)顺序 B)随机 C)线性 D)非线性 9.设一个一维数组第一个元素的存储单元的地址是100,每 个元素的长度是6,则它的第5个元素的地址是( )。 A)130 B)105 C)106 D)124 10.设n阶方阵是一个上三角矩阵,则需要存储的元素个数是 ( )。 A)n2/2 B)n(n+1)/2 C)n D)n2 11.对一些特殊矩阵采用压缩存储的目的主要是为( )。
{
temp=strstr(s,t); //返回t在s中第一次出现的指针 while(temp) { n=strlen(s)-strlen(temp); strncpy(head,s,n); tail=temp+strlen(t); strcat(head,tail); //把head,tail连接为新串 s=head; temp=strstr(s,t); }
(3,1,5),(3,2,-1),(4,5,4),(5,1,-3),则其转置矩阵的三元 组表中第3个三元组为( )。
A) (2,1,3)
C) (3,2,-1)
B) (3,1,5)
D) (2,3,-1)
14.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素 的行下标和列下标互换,就完成了对该矩阵的转置运算,这 种观点( ) A)正确 B)不正确
}
}
习题5.6:
解:(1) (2) (3) (4) 6*8*6 1000+(5*8+7)*6 1000+(1*8+4)*6 1000+(7*6+4)*6
习题5.9:
解: u=i-j+1 v=j-1
数据结构 习题 第四章 串 答案
第四章串任意串是其自身的子串。
若字符串长度为n(n>0),长为n的子串有1个,长为n-1的子串有2个,长为n-2的子串有3个,……,长为1的子串有n个。
由于空串是任何串的子串,所以本题的答案为:8*(8+1)/2+1=37。
故选B。
但某些教科书上认为“空串是任意串的子串”无意义,所以认为选C。
为避免考试中的二意性,编者认为第9题出得好。
二、判断题三.填空题1.(1) 由空格字符(ASCII值32)所组成的字符串 (2)空格个数 2.字符3.任意个连续的字符组成的子序列 4.5 5.O(m+n) 6. 7. 8.(1)模式匹配 (2)模式串9.(1)其数据元素都是字符(2)顺序存储(3)和链式存储(4)串的长度相等且两串中对应位置的字符也相等10.两串的长度相等且两串中对应位置的字符也相等。
11.’xyxyxywwy’ 12.*s++=*t++ 或(*s++=*t++)!=‘\0’13.(1)char s[ ] (2) j++ (3) i >= j14.[题目分析]本题算法采用顺序存储结构求串s和串t的最大公共子串。
串s用i指针(1<=i<=s.len)。
t串用j指针(1<=j<=t.len)。
算法思想是对每个i(1<=i<=s.len,即程序中第一个WHILE循环),来求从i开始的连续字符串与从j(1<=j<=t.len,即程序中第二个WHILE循环)开始的连续字符串的最大匹配。
程序中第三个(即最内层)的WHILE循环,是当s中某字符(s[i])与t中某字符(t[j])相等时,求出局部公共子串。
若该子串长度大于已求出的最长公共子串(初始为0),则最长公共子串的长度要修改。
程序(a):(1)(i+k<=s.len)AND(j+k<=t.len) AND(s[i+k]=t[j+k])//如果在s和t的长度内,对应字符相等,则指针k 后移(加1)。
数据结构作业及答案汇总
数据结构作业及答案汇总数据结构是计算机科学中的一个重要概念,它涉及到组织和管理数据的方式和方法。
在学习数据结构的过程中,作业和答案总结是帮助我们巩固知识和理解的重要步骤。
本文将对数据结构作业及答案进行汇总,以便帮助读者更好地学习和掌握数据结构知识。
作业一:栈和队列1. 描述栈和队列的基本特点,并给出它们的应用场景。
栈是一种容器,它具有后进先出(LIFO)的特点。
常见的应用场景有程序调用栈、浏览器的前进后退功能等。
队列是一种容器,它具有先进先出(FIFO)的特点。
常见的应用场景有任务调度、消息队列等。
2. 设计一个栈,使其具有查找最小元素的功能。
给出实现代码和分析时间复杂度。
3. 设计一个队列,使其具有查找最大元素的功能。
给出实现代码和分析时间复杂度。
作业二:链表1. 描述链表的基本特点,并给出它的应用场景。
链表是一种数据结构,它由一系列节点组成。
每个节点包含数据和指向下一节点的指针。
常见的应用场景有实现链表、存储大量数据等。
2. 设计一个单向链表,使其具有反转链表的功能。
给出实现代码和分析时间复杂度。
3. 设计一个双向链表,使其具有插入和删除节点的功能。
给出实现代码和分析时间复杂度。
作业三:树1. 描述树的基本特点,并给出它的应用场景。
树是一种非线性数据结构,它由节点和边组成。
常见的应用场景有文件系统、数据库索引等。
2. 设计一个二叉树,实现遍历功能(前序、中序、后序)。
给出实现代码和分析时间复杂度。
3. 设计一个平衡二叉树,使其具有快速查找节点的功能。
给出实现代码和分析时间复杂度。
作业四:图1. 描述图的基本特点,并给出它的应用场景。
图是一种由顶点和边组成的数据结构,边表示顶点之间的关系。
常见的应用场景有社交网络、地图导航等。
2. 设计一个有向图,实现深度优先搜索(DFS)算法。
给出实现代码和分析时间复杂度。
3. 设计一个无向图,实现广度优先搜索(BFS)算法。
给出实现代码和分析时间复杂度。
答案汇总:在本文中,我们对栈、队列、链表、树和图这几个常见的数据结构进行了作业设计和答案汇总。
数据结构习题精编:串和数组
数据结构习题精编:串和数组一、选择题1.下面关于串的的叙述中,不正确的是A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储2.下面关于串的的叙述中,正确的是A.空串就是空白串B.串相等指的是串的长度相等C.串的长度必须大于零D.串是一种特殊的线性表3.字符串是一种特殊的线性表,它与一般线性表的区别是A.字符串是一种线性结构B.字符串可以进行复制操作C.字符串可以顺序存储也可以链式存储D.字符串由字符构成并且通常作为整体参与操作4.串s="Data Structure"中长度为3的子串的数目是A.9B.11C.12D.145.若串S="software",则S的子串的数目是A.8 B.35 C.36 D.376.已知串S= "string",T="this",执行运算StrLength(StrCopy(S,T))的结果是A.2 B.4 C.6 D.107.若串S="SCIENCESTUDY",则调用函数StrCopy(P,SubString(S,1,7))后得到A.P="STUDY" B.P="SCIENCE" C.S="STUDY" D.S="SCIENCE" 8.若字符串采用链式存储,每个字符占用一个字节,每个指针在占用四个字节,则该字符串的存储密度为A.20%B.25%C.50%D.75%9.为查找某一特定单词在文本中出现的位置,可应用的串运算是A.串联接B.求子串C.串比较D.子串定位10.当目标串的长度为n,模式串的长度为m时,朴素的模式匹配算法最好情况下字符的比较次数A.m B.n C.n-m D.n+m11.当目标串的长度为n,模式串的长度为m时,朴素的模式匹配算法最坏情况下字符的比较次数A.m B.n C.(n-m+1)*m D.n*m12.已知串S="aaab",其Next数组的元素值依次为A.0、1、2、3 B.1、1、2、3 C.1、2、1、1 D.1、2、3、1 13.串"ababaaababaa" 的next数组为A.011234223456 B.012121111212 C.0123012322345 D.012345678999 14.字符串"ababaabab" 的nextval 为A.(0,1,0,1,0,0,0,1,1) B.(0,1,0,1,0,1,0,1,1)C.(0,1,0,1,0,2,1,0,1) D.(0,1,0,1,0,4,1,0,1)15.二维数组A[10][20]采用按行为主序的存储方式,每个元素占4个存储单元,若A[0][0]的存储地址为300,则A[8][10]的地址为A.660 B.732 C.980 D.113216.二维数组A[5][6]采用按列为主序的存储方式,每个元素占3个存储单元,若A[0][0]的存储地址是100,则A[4][3]的存储地址是A.157 B.166 C.169 D.18117.二维数组A按行优先顺序存储,其中每个元素占1个存储单元。
数据结构习题及标准答案
数据结构习题及标准答案一、栈和队列1. 栈(Stack)是一种后进先出(Last-In-First-Out,LIFO)的数据结构。
栈的简单实现可以使用数组或链表,下面是一个使用数组实现的栈的示例代码:```pythonclass Stack:def __init__(self):self.stack = []def is_empty(self):return len(self.stack) == 0def push(self, item):self.stack.append(item)def pop(self):if self.is_empty():return Nonereturn self.stack.pop()def peek(self):if self.is_empty():return Nonereturn self.stack[-1]```2. 队列(Queue)是一种先进先出(First-In-First-Out,FIFO)的数据结构。
队列的简单实现也可以使用数组或链表,下面是一个使用链表实现的队列的示例代码:```pythonclass Queue:def __init__(self):self.queue = []def is_empty(self):return len(self.queue) == 0def enqueue(self, item):self.queue.append(item)def dequeue(self):if self.is_empty():return Nonereturn self.queue.pop(0)def peek(self):if self.is_empty():return Nonereturn self.queue[0]```二、链表1. 链表(Linked List)是一种常见的线性数据结构。
链表由节点组成,每个节点包含数据和指向下一个节点的指针。
数据结构(树)习题与答案
一、单选题1、树最适合用来表示()。
A.元素之间具有分支层次关系的数据B.有序数据元素C.元素之间无联系的数据D.无序数据元素正确答案:A2、在树结构中,若结点A有三个兄弟,且B是A的双亲,则B的度是()。
A.5B.4C.3D.2正确答案:B3、下列陈述中正确的是()。
A.二叉树是度为2的有序树B.二叉树中结点只有一个孩子时无左右之分C.二叉树中每个结点最多只有两棵子树,并且有左右之分D.二叉树中必有度为2的结点正确答案:C4、设深度为h的二叉树中只有度为0和度为2的结点,则此类二叉树中所包含结点数至少为()。
A.2h-1B.2h+1C.h+1D.2h正确答案:A解析: A、除根之外,每层只有两个结点,且互为兄弟。
5、设深度为h的二叉树中只有度为0和度为2的结点,则此类二叉树中所包含结点数至多为()。
A.2h-1B. 2h+1-1C. 2h-1-1D. 2h+1正确答案:A解析: A、构成完全二叉树。
6、具有n(n>0)个结点的完全二叉树的深度为()。
A.⌊ log2(n)⌋ +1B.⌈log2(n)⌉C.⌊ log2(n)⌋D.⌈log2(n)+1⌉正确答案:A7、具有32个结点的完全二叉树有()个叶子结点。
A.16B.14C.15D.17正确答案:A解析: A、对结点按层序编号,32号结点的双亲结点编号为16,则17至32号结点都为叶子,共16个。
8、一棵完全二叉树的第6层上有23个叶子结点,则此二叉树最多有()结点。
A.81B.78C.80D.79正确答案:A解析: A、完全二叉树的叶子结点只能在最下两层,要使结点最多,这棵二叉树深度为7,前6层结点数共为63,第6层有32个结点,其中叶子为23个,非叶子为9个,它们的度都为2,第7层只有18个结点,故整棵二叉树结点数为81.9、具有3个结点的二叉树有()种。
A.6B.3C.5D.4正确答案:C10、若一棵二叉树有9个度为2的结点,5个度为1的结点,则叶子结点的个数为()。
数据结构练习题及答案
数据结构练习题及答案数据结构练习题及答案数据结构是计算机科学中非常重要的一个概念,它涉及到如何组织和存储数据以及如何有效地操作这些数据。
在学习数据结构的过程中,练习题是非常关键的一部分,通过解决练习题可以加深对数据结构的理解和运用能力。
本文将分享一些常见的数据结构练习题及其解答,希望能够帮助读者更好地掌握数据结构。
1. 数组反转题目:给定一个整型数组,将数组中的元素反转,要求不使用额外的空间。
解答:可以使用双指针的方法,一个指针指向数组的首部,一个指针指向数组的尾部,然后依次交换两个指针所指向的元素,直到两个指针相遇为止。
2. 链表倒数第K个节点题目:给定一个单向链表和一个正整数K,找出链表中倒数第K个节点的值。
解答:可以使用快慢指针的方法,首先让快指针先走K步,然后快慢指针同时向前移动,直到快指针到达链表尾部,此时慢指针所指的节点即为倒数第K个节点。
3. 栈的应用:括号匹配题目:给定一个字符串,判断其中的括号是否配对合法。
解答:可以使用栈来解决该问题,遍历字符串的每个字符,如果是左括号则入栈,如果是右括号则判断栈顶元素是否为对应的左括号,如果是则出栈,否则返回括号不合法。
4. 队列的应用:滑动窗口最大值题目:给定一个整型数组和一个滑动窗口的大小,求出每个滑动窗口中的最大值。
解答:可以使用双端队列来解决该问题,遍历整个数组,对于每个元素,如果队列不为空且队列尾部的元素小于当前元素,则将队列尾部的元素出队,重复该操作直到队列为空或者队列尾部的元素大于等于当前元素。
然后将当前元素入队。
同时,如果队列头部的元素已经不在当前滑动窗口的范围内,则将其出队。
每次滑动窗口移动时,队列头部的元素即为当前窗口的最大值。
5. 二叉树的遍历题目:给定一个二叉树,实现其前序、中序和后序遍历。
解答:可以使用递归的方法来实现二叉树的遍历。
前序遍历的顺序为根节点-左子树-右子树,中序遍历的顺序为左子树-根节点-右子树,后序遍历的顺序为左子树-右子树-根节点。
树练习题大全
树练习题大全一、概述树是一种常见的数据结构,用于表示具有层次关系的数据。
在计算机科学中,树结构被广泛应用于各个领域,如操作系统、编译器、数据库等。
树结构的特点是具有一个根节点,每个节点可以有多个子节点,形成层次结构。
二、常见概念1. 节点:树中的每个元素称为节点,节点可以包含一个数据项或多个数据项。
2. 根节点:树的顶部节点称为根节点,它是树的唯一入口。
3. 子节点:节点下面的节点称为子节点,一个节点可以有多个子节点。
4. 父节点:节点上面的节点称为父节点,一个节点可以有一个父节点。
5. 叶子节点:没有子节点的节点称为叶子节点。
6. 层级:节点的层级由根节点到该节点的路径长度决定,根节点的层级为0。
7. 子树:一个节点及其所有后代节点构成的树称为子树。
8. 深度:树的深度是树中任一节点到叶子节点的最长路径长度。
9. 二叉树:每个节点最多有两个子节点的树称为二叉树。
三、树的遍历树的遍历是指按照一定的规则访问树中的所有节点。
常见的树的遍历方式有前序遍历、中序遍历和后序遍历。
1. 前序遍历(Preorder Traversal)前序遍历先访问根节点,然后递归地遍历左子树和右子树。
2. 中序遍历(Inorder Traversal)中序遍历先递归地遍历左子树,然后访问根节点,最后递归地遍历右子树。
3. 后序遍历(Postorder Traversal)后序遍历先递归地遍历左子树和右子树,然后访问根节点。
四、树的应用1. 二叉搜索树(Binary Search Tree,BST)二叉搜索树是一种特殊的二叉树,对于每个节点,其左子树的值都小于节点的值,右子树的值都大于节点的值。
二叉搜索树常用于实现快速查找、插入和删除。
2. 平衡树(Balanced Tree)平衡树是一种高度平衡的二叉搜索树,可以保证在最坏情况下的时间复杂度仍然是O(log n)。
常见的平衡树有红黑树、AVL树等。
3. 堆(Heap)堆是一种特殊的树结构,可以分为最大堆和最小堆。
《数据结构题集》参考答案4串
《数据结构题集》参考答案4串4.10③编写对串求逆的递推算法。
要求实现以下函数:void Reverse(StringType &s);/* Reverse s by iteration. */StringType是串的一个抽象数据类型,它包含以下6种基本操作:void InitStr(StringType &s);// 初始化s为空串。
void StrAssign(StringType &t, StringType s);// 将s的值赋给t。
s的实际参数是串变量。
int StrCompare(StringType s, StringType t);// 比较s和t。
若s>t,返回值>0;若s=t,返回值=0;若s<t,返回值<="" strlength(stringtype="">// 返回s中的元素个数,即该串的长度。
StringType Concat(StringType &s, StringType t);// 返回由s和t联接而成的新串。
StringType SubString(StringType s, int start, int len);// 当1<=start<=StrLength(s)且0<=len<=StrLength(s)- start+1时,// 返回s中第start个字符起长度为len的子串,否则返回空串。
// 注意,不要使用" s = " 的形式为StringType 类型的变量赋值,// 而要使用StrAssign 函数void Reverse(StringType &s)/* Reverse s by iteration. */{int i=0,j=StrLength(s)-1;char temp;while(i<=j){temp=s[i];s[i]=s[j];s[j]=temp;i++;j--;}}4.13③编写算法,从串s中删除所有和串t相同的子串。
数据结构-树练习题
数据结构-树练习题一、选择题1、二叉树的深度为k,则二叉树最多有( C )个结点。
A. 2kB. 2k-1C. 2k-1D. 2k-12、用顺序存储的方法,将完全二叉树中所有结点按层逐个从左到右的顺序存放在一维数组R[1..N]中,若结点R[i]有右孩子,则其右孩子是( B )。
A. R[2i-1]B. R[2i+1]C. R[2i]D. R[2/i]3、设a,b为一棵二叉树上的两个结点,在中序遍历时,a在b前面的条件是( B )。
A. a在b的右方B. a在b的左方C. a是b的祖先D. a是b的子孙4、设一棵二叉树的中序遍历序列:badce,后序遍历序列:bdeca,则二叉树先序遍历序列为()。
A. adbceB. decabC. debacD. abcde5、在一棵具有5层的满二叉树中结点总数为( A )。
A. 31B. 32C. 33D. 166、由二叉树的前序和后序遍历序列( B )惟一确定这棵二叉树。
A. 能B. 不能7、某二叉树的中序序列为ABCDEFG,后序序列为BDCAFGE,则其左子树中结点数目为( C )。
A. 3B. 2C. 4D. 58、若以{4,5,6,7,8}作为权值构造哈夫曼树,则该树的带权路径长度为( C )。
A. 67B. 68C. 69D. 709、将一棵有100个结点的完全二叉树从根这一层开始,每一层上从左到右依次对结点进行编号,根结点的编号为1,则编号为49的结点的左孩子编号为(A )。
A. 98B. 99C. 50D. 4810、表达式a*(b+c)-d的后缀表达式是( B )。
A. abcd+-B. abc+*d-C. abc*+d-D. -+*abcd11、对某二叉树进行先序遍历的结果为ABDEFC,中序遍历的结果为DBFEAC,则后序遍历的结果是( B )。
A. DBFEACB. DFEBCAC. BDFECAD. BDEFAC12、树最适合用来表示( C )。
生信树作业答案
process (t->rchild);
t->lchild<=>t->rchild;
return;
}
非递归:
void change(BiTreet)
{ if(t=null) return ;
intrear=0,front=-1;
queue[rear]=t;
while(front!=rear)
nn12n012482已知某字符串s中共有8种各种字符分别出现2次1次4次5次7次3次4次和9次对该字符串用01进行前缀编码问该字符串的编码至少有多少位
第6章
1、一棵有124个叶子结点的完全二叉树,最多有几个结点?
答案:n=n1+2n0-1
248
2、已知某字符串S中共有8种,各种字符分别出现2次、1次、4次、5次、7次、3次、4次和9次,对该字符串用(0,1)进行前缀编码,问该字符串的编码至少有多少位?
p->rchild=temp;
}
}
4、顺序存储完全二叉树的先序非递归遍历:
void Preorder(SqBiTreebt)
{i=1;
top=0;
while(i<=n || top!= 0)
{ while(i<=n)
{call visit(bt[i]);
top = top + 1;
stack[top]=i;
{ front++;
p=queue[front];
if(p->lchild!=null)
{rear++;
queue[rear]=p->lchild;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四-六章串、数组、树作业一、判断正误:(每小题1分,共5分)正确在()内打√,否则打× .1.(√)子串是主串中任意个连续字符组成的序列.2.(×)线性结构只能用顺序结构存放,非线性结构只能用链表存放.3.(√)完全二叉树的某结点若无左孩子,则它必是叶结点.4.(√)二叉树有五种基本形态.5. (√)由树的中序表示和前序表示可以导出树的后序表示.6. (√)将一棵树转换为二叉树表示后,该二叉树的根结点没有右子树.7. (√)采用二叉树来表示树时,树的先根次序遍历结果与其对应的二叉树的前序遍历结果是一样的.8. (×)在Huffman树中,权值较大的叶子结点离根较远.9. (×)用一维数组存储二叉树时,是以先根遍历的次序存储结点.二、填空题1.已知二维数组A[0..10][0..20]采用行序为主方式存储,每个元素占2个存储单元,并且A[0][0]的存储地址是1024, 则A[6][18]的地址是1312(1024+2*(6*21+18)) .2. 深度为5的二叉树最多有_____31___个结点(根结点层数为1).3.高度为h的完全二叉树最少有2h-1个结点.4. 二叉树的先序遍历序列为:EFHIGJK,中序遍历序列为:HFIEJKG,则该二叉树根的右子树的根是:G .5. N个结点的二叉树,采用二叉链表存放,空链域的个数为N+1 .6. 填空完成下面中序遍历二叉树的非递归算法:void InOrder(BiTree root){ InitStack ( &S );p = ____root_____ ;while ( _____p________ || ! IsEmpty(S)){ while (p!=NULL){ Push(&S, __p___ ) ;p = _____p->lchild_________ ;}if ( ____! IsEmpty(S)___________ ){ Pop(&S, __p_____ ) ;Visit ( p -> data );p = ___p->rchild____________ ;}}}三、选择题1.表达式a*(b−c)+d的后缀表达式是( B).A)abcd*−+ B)abc−*d+ C)abc*−d+ D)+−*abcd2.对于有N个结点高度为K的满二叉树(结点编号为1到N,根结点的层数为1),其第K 层上最后1个结点的编号为 ( D ).A)2K B)2K−1 C)B)2K−1−1 D)2K−13.将一棵有100个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根结点编号为1,则编号最大的非叶结点的编号为:( C ) .A)48 B)49 C)50 D)514.在下列存储形式中,哪一个不是树的存储形式?( D ) .A)双亲表示法 B)孩子链表表示法C)孩子兄弟表示法 D)顺序存储表示法5.某二叉树结点的中序序列为:A、B、C、D、E、F、G,后序序列为:B、D、C、A、F、G、E,则其左子树中结点数目为:( C ) .A)3 B)2 C)4 D)56.从供选择的答案中,选出应填入下面叙述内的最确切的解答,把相应编号写在对应栏内.有一个二维数组A,行下标的范围是0到8,列下标的范围是1到5,每个数组元素用相邻的4个字节存储.存储器按字节编址.假设存储数组元素A[0,1]的第一个字节的地址是0.存储数组A的最后一个元素的第一个字节的地址是 A .若按行存储,则A[3,5]和A[5,3]的第一个字节的地址分别是 B 和 C .若按列存储,则A[7,1]和A[2,4]的第一个字节的地址分别是 D 和 E .供选择的答案A~E:①28 ②44 ③76 ④92 ⑤108 ⑥116 ⑦132 ⑧176 ⑨184 ⑩188答案:A=⑧B=③C=⑤D=①E= ⑥7、从供选择的答案中,选出应填入下面叙述内的最确切的解答,把相应编号写在对应栏内.有一个二维数组A,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址.那么,这个数组的体积是 A 个字节.假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是 B .若按行存储,则A[2,4]的第一个字节的地址是 C .若按列存储,则A[5,7]的第一个字节的地址是 D .供选择的答案A~D:①12 ②66 ③72 ④96 ⑤114 ⑥120 ⑦156 ⑧234 ⑨276 ⑩282 (11)283 (12)288答案:A=(12)B=⑩C=③D=⑨8.将一棵有100个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根结点编号为1,则编号为49的结点的左孩子的编号为:( A )A)98 B)99 C)50 D)489. 设森林F中有三棵树,第一、第二和第三棵树的结点个数分别为M1、M2和M3.与森林F对应的二叉树根结点的右子树上的结点个数是:( D )A)M1 B)M1+M2 C)M3 D)M2+M3四、综合题1. 设s=’I AM A STUDENT’, t=’GOOD’, q=’WORKER’.给出下列操作的结果:StrLength(s); SubString(sub1,s,1,7); SubString(sub2,s,7,1);StrIndex(s,’A’,4); StrReplace(s,’STUDENT’,q);StrCat(StrCat(sub1,t), StrCat(sub2,q));【解答】StrLength(s)=14;SubString(sub1,s,1,7) sub1=’I AM A ’;SubString(sub2,s,7,1) sub2=’ ’;StrIndex(s,4,’A’)=6;StrReplace(s,’STUDENT’,q); s=’I AM A WORKER’;StrCat(StrCat(sub1,t),StrCat(sub2,q)) sub1=’I AM A GOOD WORKER’.2. 假设有6行8列的二维数组A,每个元素占用6个字节,存储器按字节编址.已知A的基地址为1000,计算:数组A共占用多少字节;数组A的最后一个元素的地址;按行存储时元素A36的地址;按列存储时元素A36的地址;【解答】设自定义数组的下标从1开始使用.(1)数组A共占用多少字节;(288)(2)数组A的最后一个元素的地址;(1282)(3)按行存储时,元素A36的地址;(1126)(4)按列存储时,元素A36的地址;(1192)3. 分别画出具有3个结点的树和3个结点的二叉树的所有不同形态.【解答】具有3个结点的树具有3个结点的二叉树4. 已知一棵度为k的树中有n1个度为1的结点,n2个度为2的结点,……,n k个度为k 的结点,则该树中有多少个叶子结点?【解答】设树中结点总数为n,则n=n0 + n1 + …… + n k树中分支数目为B,则B=n1 + 2n2 + 3n3+ …… + kn k因为除根结点外,每个结点均对应一个进入它的分支,所以有n= B + 1即n0 + n1 + …… + n k = n1 + 2n2 + 3n3+ …… + kn k + 1由上式可得叶子结点数为:n0 = n2 + 2n3+ …… + (k-1)n k + 15. 已知二叉树有50个叶子结点,则该二叉树的总结点数至少应有多少个?【解答】n0表示叶子结点数,n2表示度为2的结点数,则n0 = n2+1所以n2=n0 –1=49,当二叉树中没有度为1的结点时,总结点数n=n0+n2=996. 试分别找出满足以下条件的所有二叉树:(1) 前序序列与中序序列相同;(2) 中序序列与后序序列相同;(3) 前序序列与后序序列相同.【解答】(1) 前序与中序相同:空树或缺左子树的单支树;(2) 中序与后序相同:空树或缺右子树的单支树;(3) 前序与后序相同:空树或只有根结点的二叉树.7. 假设通讯的电文仅由8个字母组成,字母在电文中出现的频率分别为:0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10请为这8个字母设计哈夫曼编码.【解答】构造哈夫曼树如下:哈夫曼编码为:I1:11111I5:1100I2:11110I6:10I3:1110 I7: 01I4:1101 I8: 00 8. 画出如下图所示树对应的二叉树.【解答】9. 分别写出算法,实现在中序线索二叉树T中查找给定结点*p在中序序列中的前驱与后继.在先序线索二叉树T中,查找给定结点*p在先序序列中的后继.在后序线索二叉树T中,查找给定结点*p在后序序列中的前驱.(1)找结点的中序前驱结点BiTNode *InPre (BiTNode *p)/*在中序线索二叉树中查找p的中序前驱结点,并用pre指针返回结果*/{ if (p->Ltag= =1) pre = p->LChild; /*直接利用线索*/else{/*在p的左子树中查找“最右下端”结点*/for ( q=p->LChild; q->Rtag= =0; q=q->RChild);pre = q;}return (pre);}(2)找结点的中序后继结点BiTNode *InSucc (BiTNode *p)/*在中序线索二叉树中查找p的中序后继结点,并用succ指针返回结果*/{ if (p->Rtag= =1) succ = p->RChild; /*直接利用线索*/else{/*在p的右子树中查找“最左下端”结点*/for ( q=p->RChild; q->Ltag= =0; q=q->LChild);succ= q;}return (succ);}(3) 找结点的先序后继结点BiTNode *PreSucc (BiTNode *p)/*在先序线索二叉树中查找p的先序后继结点,并用succ指针返回结果*/{ if (p->Ltag= =0) succ = p->LChild;else succ= p->RChild;return (succ);}(4) 找结点的后序前驱结点BiTNode *SuccPre (BiTNode *p)/*在后序线索二叉树中查找p的后序前驱结点,并用pre指针返回结果*/{ if (p->Ltag= =1) pre = p->LChild;else pre= p->RChild;return (pre);}10. 已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法.【解答】Void PreOrder(BiTree root) /*先序遍历二叉树的非递归算法*/{InitStack(&S);p=root;while(p!=NULL || !IsEmpty(S) ){ if(p!=NULL){Visit(p->data);push(&S,p);p=p->Lchild;}else{Pop(&S,&p);p=p->RChild;}}}11. 已知二叉树按照二叉链表方式存储,编写算法,将二叉树左右子树进行交换.【解答】算法(一)Void exchange ( BiTree root ){p=root;if ( p->LChild != NULL || p->RChild != NULL ){temp = p->LChild; p->LChild = p->RChild;p->RChild = temp;exchange ( p->LChild );exchange ( p->RChild );}}算法(二)Void exchange ( BiTree root ){p=root;if ( p->LChild != NULL || p->RChild != NULL ){exchange ( p->LChild );exchange ( p->RChild );temp = p->LChild;p->LChild = p->RChild;p->RChild = temp;}}12.已知一棵树如图1所示.要求:给出树的先根遍历序列和后根遍历序列;画出树的孩子-兄弟链表; 将该树转化为二叉树. 【解:】(1)先根序列:(2)后根序列:(3)树的孩子-兄弟链表:(4)转化为二叉树:13. 画出和下列已知序列对应的二叉树T:树的先根次序访问序列为GFKDAIEBCHJ;树的后根次序访问序列为CBEFDGAJIKLH.【解:】先根序列中G是整棵树的根,后根序列中H是整个树的根,矛盾,无解.14 假设一棵二叉树的中序序列为DCBGEAHFIJK和后序序列为DCEGBFHKJIA.请画出该树.【解:】15.假设一棵二叉树的层序序列为ABCDEFGHIJ和中序序列为DBGEHJACIF.请画出该树. 【解:】16.编写递归算法,在二叉树中求位于先序序列中第k个位置的结点的值.【解:】int n=0;Status Preorder (BiTree T, int k, ElemType &e){// 若k小于二叉树的总结点个数,则由变量e带回第k个结点的值并返回OK,// 否则返回ERRORif (T) { n++;if (n==k) { e=T->data; return OK ;}else {if (Preorder(T->lchild, k,e)) return OK;else return(Preorder(T->rchild, k, e)) ;}//else}//ifelse return ERROR;}17.编写递归算法,计算二叉树中叶子结点的数目.int CountLeaf (BiTree T){//返回指针T所指二叉树中所有叶子结点个数if (!T ) return 0;if (!T->lchild && !T->rchild) return 1;else{m = CountLeaf( T->lchild);n = CountLeaf( T->rchild);return (m+n);} //else} // CountLeaf18.编写算法,层次遍历一棵二叉树.给定一棵用二叉链表表示的二叉树,其中的指针t指向根结点,试写出从根开始,按层次遍历二叉树的算法,同层的结点按从左至右的次序访问.解答:考虑用一个顺序队que来保存遍历过程中的各个结点,由于二叉树以二叉链表存储,所以可设que为一个指向数据类型为bitree的指针数组,最大容量为maxnum,下标从1开始,同层结点从左到右存放.算法中的front为队头指针,rear为队尾指针.levelorder (BiTree *t) //按层次遍历二叉树t{ BiTree *que[maxnum];int rear,front;if (t!=NULL){ front=0; //置空队列rear=1;que[1]=t;do{ front=front%maxsize+1; //出队t=que[front];printf(t->data);if (t->lchild!=NULL) //左子树的根结点入队{ rear=rear%maxsize+1;que[rear]=t->lchild;}if (t->rchild!=NULL) //右子树的根结点入队{ rear=rear%maxsize+1;que[rear]=t->rchild;}}while (rear= =front); //队列为空时结束}}*****************************思考题(不做在本子上)*****************************1.名词解释:树,子树,结点的度,叶子结点,孩子,双亲,兄弟,深度,有序树,森林,二叉树,遍历二叉树,树的带权路径长度,哈夫曼树.2.描述二叉树的性质.3.从概念上讲,树、森林和二叉树是三种不同的数据结构,将树、森林转换为二叉树的基本目的是什么?指出树和二叉树的主要区别.4.已知一棵树边的结点为{<I,M>,<I,N>,<E,I>,<B,E>,<B,D>,<A,B>,<G,J>,<G,K>,<C,G>,<C,F>,<H,L>,<C,H>,<A,C>},试画出这棵树,并回答下列问题:(1)哪个是根结点?(2)哪些是叶子结点?(3)哪个是结点G的双亲?(4)哪些是结点G的祖先?(5)哪些是结点G的孩子?(6)哪些是结点E的子孙?(7)哪些是结点E的兄弟?哪些是结点F的兄弟?(8)结点B和N的层次号分别是什么?(9)树的深度是多少?5.已知在一棵含有n 个结点的树中,只有度为k 的分支结点和度为0的叶子结点.试求该树含有的叶子结点的数目.6.有n个结点的二叉树,已知叶子结点个数为n0,写出求度为1的结点的个数n1的计算公式;若此树是深度为k的完全二叉树,写出n为最小的公式;若二叉树中仅有度为0和度为2的结点,写出求该二叉树结点个数n的公式.7.找出所有满足下列条件的二叉树:(a)它们在先序遍历和中序遍历时,得到的结点访问序列相同;(b)它们在后序遍历和中序遍历时,得到的结点访问序列相同;(c)它们在先序遍历和后序遍历时,得到的结点访问序列相同;11 / 11。