大数据结构导论作业一
大数据导论习题及答案

第1章1.简述什么是大数据?答:大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
2.大数据的数据有什么特点?答:数据量大(Volume)、数据类型复杂(Variety)、数据产生速度快(Velocity)、价值密度低(Value)。
3.大数据对科学研究有什么影响?答:促进了科学研究的第四范式产生和交叉学科的发展。
4.大数据有哪些数据类型?答:有结构化数据、非结构化数据和半结构化数据。
5.大数据有哪些应用?答:大数据可以在众多领域创造巨大的衍生价值:实现数据的资源化,帮助企业抢占市场,提供个性化服务,指定有效方针等;与云计算深度结合;可能会改变数据世界里的很多算法和基础理论,实现科学技术上的突破第2章1.简述什么是云计算?答:①云计算是一种动态扩展的计算模式,通过网络将虚拟化的资源作为服务提供给用户。
②云计算是一种无处不在的、便捷的通过互联网访问的一个可定制的IT资源(IT资源包括网络、服务器、存储、应用软件和服务)共享池,是一种按使用量付费的模式。
它能够通过最少量的管理或与服务供应商的互动实现计算资源的迅速供给和释放2.云计算有什么特点?答:①具有大规模并行计算能力②资源虚拟化和弹性调度③数据量巨大并且增速迅猛产生了典型的大数据处理技术3.请简述云计算的三种主要部署模式。
答:①公有云:提供面向社会大众、公共群体的云计算服务②私有云:提供面向应用行业/组织内的云计算服务③混合云:是把公有云和私有云进行整合,吸纳二者的优点,给企业带来真正意义上的云计算服务4.请简述云计算的三种主要服务模式。
答:1.基础设施即服务(IaaS)①主要用户是系统管理员②直接利用云提供的资源进行业务的部署或简单的开发③服务提供商提供给用户的服务是计算和存储基础设施④用户不管理或控制任何云计算基础设施,但能控制操作系统的选择⑤关键技术及解决方案是虚拟化技术2.平台即服务(PaaS)①主要用户是开发人员②把应用服务的运行和开发环境作为一种服务提供的商业模式即PaaS是把二次开发的平台以服务形式提供给开发软件的用户使用③开发人员不需要管理或控制底层的云计算基础设施,但可以方便地使用很多在构建应用时的必要服务④两个关键技术:分布式的并行计算和大文件分布式存储3.软件即服务(SaaS)①主要用户是普通用户②服务提供商提供给用户的服务是运行在云计算基础设施上的应用程序,用户只需要通过终端设备接入使用即可,简单方便,不需要用户进行软件开发,也无需管理底层资源③关键技术是多租户技术,使资源能够更好的共享5.请画出云计算基础设施Google平台的基础架构图。
数据结构大作业

数据结构大作业平衡二叉树是一种特殊的二叉树结构,在插入或删除节点时,通过旋转操作来保持树的平衡性,从而提高查找、插入或删除操作的效率。
平衡二叉树的一种常见实现方式是AVL树。
AVL树是由俄罗斯数学家Adelson-Velsky和Landis于1962年提出的,它是一种自平衡的二叉树。
在AVL树中,每个节点的左右子树的高度之差(也称为平衡因子)不超过1、当插入或删除节点后导致一些节点的平衡因子超过1时,就需要通过旋转操作进行平衡调整。
具体来说,插入节点时,需要首先将节点插入到AVL树的合适位置。
然后,自底向上地检查每个节点的平衡因子。
如果发现一些节点的平衡因子超过1,则需要进行相应的旋转操作,使树重新恢复平衡。
旋转操作有四种基本情况,分别是LL、RR、LR和RL旋转。
LL旋转发生在一些节点的左子树的左子树上,RR旋转发生在一些节点的右子树的右子树上,LR旋转发生在一些节点的左子树的右子树上,RL旋转发生在一些节点的右子树的左子树上。
通过这些旋转操作,可以使树重新平衡。
删除节点时,需要先找到待删除的节点,并根据其子树的情况进行删除操作。
然后,从被删除节点的父节点向上检查每个节点的平衡因子,如果发现不平衡的节点,也需要进行相应的旋转操作。
AVL树的平衡调整是通过旋转操作来实现的,旋转操作的时间复杂度为O(1),因此平衡调整的时间复杂度为O(logn),其中n为树的节点数。
平衡二叉树的优点是能够保持树的平衡性,提高查找、插入、删除等操作的效率。
总结起来,平衡二叉树是一种特殊的二叉树,通过旋转操作来保持树的平衡性,从而提高查找、插入或删除操作的效率。
AVL树是一种常见的平衡二叉树实现方式,通过LL、RR、LR和RL旋转来使树重新平衡。
平衡二叉树的优点是能够保持树的平衡性,提高操作的效率。
数据结构导论练习题

数据结构导论练习题一、选择题1.在一个单链表HL中,若要在指针q所指结点的后面插入一个由指针p所指向的结点,则执行。
A.q一)next=p一)next;p一)next=q;B.p一)next=q一)next;q=p;C.q一)next=p一)next;p一)next=q;D.p一)next=q一)next; q一)next=p;2. 在一个顺序队列中,队首指针指向队首元素的位置:A.前一个B.后一个C.当前3. 下列数据组织形式中,()的结点按逻辑关系依次排列形成一个“锁链”。
A.集合B.树形结构C.线性结构D.图状结构4. 数据结构可以形式化地定义为(S,△),其中S指某种逻辑结构,△是指()A.S上的算法B.S的存储结构C.在S上的一个基本运算集D.在S上的所有数据元素5. 下列说法正确的是()A.线性表的逻辑顺序与存储顺序总是一致的B.线性表的链式存储结构中,要求内存中可用的存储单元可以是连续的,也可以不连续C.线性表的线性存储结构优于链式存储结构D.每种数据结构都具有插入、删除和查找三种基本运算6. 设非空单链表的数据域为data,指针域为next,指针p指向单链表中第i个结点,s指向已生成的新结点,现将s结点插入到单链表中,使其成为第i个结点,下列算法段能正确完成上述要求的是()A.s->next=p->next;p->next=s;B.p->next=s;s->next=p->next;C.s->next=p->next;p->next=s;交换p->data和s->data;D.p=s;s->next=p;7. 将一棵有50个结点的完全二叉树按层编号,则对编号为25的结点x,该结点()A.无左、右孩子B.有左孩子,无右孩子C.有右孩子,无左孩子D.有左、右孩子8. 采用线性探测法解决冲突问题,所产生的一系列后继散列地址()A.必须大于等于原散列地址B.必须小于等于原散列地址C.可以大于或小于但不能等于原散列地址D.地址大小没有具体限制9. 用快速排序方法对包含有n个关键字的序列进行排序,最坏情况下执行的时间复杂度为()A.O(n)B.O(log2n)C.O(nlog2n)D.O(n2)10. 下列数据结构中,( )不都是线性结构。
全国自学考试数据结构导论试题及答案4套

全国自学考试数据结构导论试题及答案4套第一套试题一、选择题(每题4分,共40分)1. 下列哪个数据结构是一种非线性结构?A. 数组B. 栈C. 队列D. 树2. 下列哪种算法不适用于解决排序问题?A. 冒泡排序B. 快速排序C. 深度优先搜索D. 归并排序3. 在数据结构中,堆的底层实现通常采用哪种数据结构?A. 数组B. 栈C. 链表D. 队列4. 下列哪个选项是描述图结构的准确说法?A. 图结构是一种线性结构B. 图结构由节点和指向节点的边构成C. 图结构不能存储数据D. 图结构不支持插入和删除操作5. 下列哪个排序算法具有最坏时间复杂度为O(nlogn)?A. 冒泡排序B. 插入排序C. 选择排序D. 希尔排序二、填空题(每题4分,共40分)1. 在二叉树中,每个节点最多有____个子节点。
2. 图的两个顶点之间的路径长度是指连接这两个顶点所需的____数。
3. 链表是一种____结构。
4. 快速排序算法的核心思想是____。
5. 栈和队列都属于线性结构,其主要区别在于____操作的限制。
三、简答题(每题10分,共30分)1. 请简要描述栈的特点以及栈的应用场景。
2. 请简要介绍图的基本概念,并说明图的应用领域。
3. 请解释递归算法的原理,并给出一个使用递归算法解决问题的例子。
四、编程题(共30分)请使用任意编程语言实现一个简单的栈数据结构,并编写测试代码进行验证。
第二套试题一、选择题(每题4分,共40分)1. 在二叉搜索树中,中序遍历的结果是____。
A. 升序排列B. 降序排列C. 随机排序D. 不确定的排序2. 在哈希表结构中,解决冲突问题的常用方法是____。
A. 线性探测B. 链地址法C. 开放地址法D. 扩容法3. AVL树是一种____。
A. 二叉搜索树B. 哈希表C. B树D. 红黑树4. 以下哪个算法不是用于解决查找问题?A. 二分查找B. 深度优先搜索C. 广度优先搜索D. 哈希查找5. 以下哪个数据结构不支持随机访问元素?A. 数组B. 栈C. 链表D. 哈希表二、填空题(每题4分,共40分)1. 在二叉树中,每个节点最多有____个子节点。
数据结构导论试题和部分答案

全国2年1月数据结构导论试题课程代码:一、单项选择题(本大题共5小题,每小题2分,共30分)1.结点按逻辑关系依次排列形成一条“锁链”的数据结构是( )A.集合 B.线性结构 C.树形结构 D.图状结构2.下面算法程序段的时间复杂度为( )for ( int i=0; i<m; i++)for ( int j=0; j<n; j++)a[i][j]=i*j;A. O(m2)B. O(n2)C. O(mn)D. O(m+n)3.线性结构是()A.具有n(n≥0)个表元素的有穷序列 B.具有n(n≥0)个字符的有穷序列C.具有n(n≥0)个结点的有穷序列D.具有n(n≥0)个数据项的有穷序列4.单链表中删除由某个指针变量指向的结点的直接后继,该算法的时间复杂度是()A. O(1)n ) D. O(n)5.关于串的叙述,正确的是( ) A.串是含有一个或多个字符的有穷序列 B.空串是只含有空格字符的串C.空串是含有零个字符或含有空格字符的串D.串是含有零个或多个字符的有穷序列6.栈的输入序列依次为,2,3,4,则不可能的出栈序列是()A.1243 B. 1432 C. 2134 D.43127.队列是( )A. 先进先出的线性表 B. 先进后出的线性表 C. 后进先出的线性表 D.随意进出的线性表8.10阶上三角矩阵压缩存储时需存储的元素个数为( ) A.11 B.56 C.100 D.1019.深度为k(k≥ )的二叉树,结点数最多有( )A.2k个 B.(2k -1)个 C.2k-1个 D.(2k+1)个10.具有12个结点的二叉树的二叉链表存储结构中,空链域L L的个数为( )A. 11 B.13 C. 23 D.2511.具有n个顶点的无向图的边数最多为( )A.n+1 B.n(n+1) C.n(n-1)/2 D.2n(n+1)12.三个顶点1,v2,v3的图的邻接矩阵为010001010⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦,该图中顶点v3的入度为( )A. 0 B. 1 C. 2D. 313.顺序存储的表格中有0000个元素,已按关键字值升序排列,假定对每个元素进行查找的概率是相同的,且每个元素的关键字值不相同。
数据结构导论作业一

1、章节作业第一章概论1.设计算法在整型数组A[n]中查找值为K的元素,若找到,则输出其位置i(0≤i≤n-1),否则输出-1作为标志,并分析算法的时间复杂度。
int search (int A[],int n,int k){ int i;i=0;while (i<=n-1)if (A[i]!=k) i++;else break;if (i<=n-1) return I;else return -1;}当查找成功时,A[i]与k比较次数≤n;当查找不成功时,A[i]与k比较n次,所以,算法时间复杂度T(n)=O(n)。
2.写出计算方阵A[n][n]与B[n][n]乘积C[n][n]的算法,分析算法的时间复杂度。
void matrixmultiply (int A[][n],int B[][n],int C[][n],int n){ int I,j;for (i=0;i<n;i++)for (j=0;j<n;j++){ C[i][j]=0;for (k=0;k<n;k++)C[i][j]+=A[i][j]*B[k][j];}}以方阵阶数n作为输出规模。
可知第二层循环中的第一条赋值语句共执行n2次,第三层循环体中的乘法和赋值语句共执行n3次,所以此算法的计算量为n3+n2,算法时间复杂T(n)=O(n3)第二章线性表1.设带头结点的单链表的结点结构如下:struct node { DataType data;struct node *next;} Node, *LinkList;试编写一个函数int count(LinkList head,DataType x)统计单链表中数据域为x的结点个数。
int count(LinkList head,DataType x){LinkList p=head->next;Int m=0;while (p!=NULL){ if(p->data==x) m++;p=p->next;}return m;}2.试分别以顺序表和带头结点的单链表作存储结构,各写一个实现线性表的就地(即使用尽可能少的附加空间)逆置的算法,在原表的存储空间内将线性表(a1,a2,…,a n)逆置为(a n,a n-1,…,a1)。
全国自学考试数据结构导论试题答案与解析4套

全国2011年1月自学考试数据结构导论试题课程代码:02142、单项选择题(本大题共15小题,每小题2分,共30分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1•在顺序表中查找第i个兀素,时间效率最高的算法的时间复杂度为()A.O(1)B.O(、、n )C.O(log 2n)D.O( n)2•树形结构中,度为0的结点称为()A.树根B.叶子C.路径D.二叉树3•已知有向图 G=(V,E),其中 V={V 1,V2,V3,V4,V5,V6,V7} , E={<v 1,V2> , <V l,V3> , <V I,V4>, <V2,V5>, <V3,V5>,<V 3,V6>,<V4,V6>,<V5,V7>,,<V6,V7>},则图 G 的拓扑序列是A.V 1 ,V3,V4,V6,V2,V5,V7B.V 1,V3,V2,V6,V4,V5,V7C.V1,V3,V4,V5,V2,V6,V7D.V1,V2,V5,V3,V4,V6,V74•有关图中路径的定义,表述正确的是()A.路径是顶点和相邻顶点偶对构成的边所形成的序列B.路径是不同顶点所形成的序列C.路径是不同边所形成的序列D.路径是不同顶点和不同边所形成的集合5•串的长度是指()A.串中所含不同字母的个数B.串中所含字符的个数C.串中所含不同字符的个数D.串中所含非空格字符的个数6•组成数据的基本单位是()A.数据项B・数据类型C.数据兀素D.数据变量7.程序段 i=n ; x=0;do{x=x+5*i ; i--; }while (i>0);的时间复杂度为()A.O (1)B.O (n)C.O (n2)D.O(n3)8•与串的逻辑结构不同的.数据结构是()A.线性表B.栈C.队列D.树..专业知识编辑整理••14.如果结点A有3个兄弟结点,而且 B为A的双亲,则B的度为(16.下列程序段的时间复杂度为C.〃 BCDEFG 〃9.二叉树的第i (i > 1 )层上所拥有的结点个数最多为(A.2iB.2ii-1D.2-1C.210.设单链表中指针p指向结点A,若要删除A的直接后继,则所需修改指针的操作为A.p-> next=p-> next-〉B.p=p->nC.p=p->n ext->D.p->n11.下列排序算法中,某一趟结束后未必能选出一个元素放在其最终位置上的是A.堆排B.冒泡排序C.直接插入排序D.快速排序12.设字符串 S1 = 〃 ABCDEFG ”,S2= 〃 PQRST",则运算S=CONCAT(SUBSTR(S1,2,LENGTH(S2)),SUBSTR(S1,LENGTH(S2),2))后S的结果为(BCDEF 〃A. 〃 BCQR 〃B.D.BCDEFEF 〃13.在平衡二叉树中插入一个结点后造成了不平衡, 设最低的不平衡结点为A,并且A的左孩子的平衡因子为-1, 孩子的平衡因子为 0,则使其平衡的调整方法为A.LL 型C.RL 型D.RR 型A.1B.3C.4D.515.数据表A中每个元素距其最终位置较近,则最省时间的排序算法是A.堆排B.插入排序C.直接选择排序D.快速排序二、填空题(本大题共13小题,每小题2分,共26分)请在每小题的空格中填上正确答案。
数据结构导论自考题-1_真题(含答案与解析)-交互

数据结构导论自考题-1(总分100, 做题时间90分钟)一、单项选择题在每小题列出的四个备选项中只有一个是符合题目要求的。
1.算法的便于阅读和理解的特性称为( )A.正确性B.易读性C.健壮性D.时空性SSS_SIMPLE_SINA B C D分值: 2答案:B[解析] 本题主要考查的知识点是算法的易读性。
[要点透析] 算法的易读性是指易于阅读、理解和交流,便于调试、修改和扩充。
2.给定有n个元素,建立一个有序单链表的时间复杂度为( ) A.O(1) B.O(n)n)C.O(n2) D.O(nlog2SSS_SIMPLE_SINA B C D分值: 2答案:B[解析] 本题主要考查的知识点是建立有序单链表的时间复杂度。
[要点透析] 在创建有序单链表的过程中,每一次将新结点链接入有序表的时间分两部分,其一是查找插入的合适位置,其二是将元素插入。
后者的时间复杂度是常量O(1),而前者的时间复杂度由比较元素的次数决定,由于元素比较的次数是不确定的,只能取平均比较次数,为(n+1)/2,故其时间复杂度为O(n)。
由线性累加规则可得整个算法的时间复杂度为:O(n)。
3.在双链表中某结点(已知其地址)前插入一新结点,其时间复杂度为( ) A.O(n) B.O(1)C.O(n2) D.O(logn)2SSS_SIMPLE_SINA B C D分值: 2答案:B4.顺序栈s中top为栈顶指针,指向栈顶元素所在的位置,elem为存放栈的数组,则元素e进栈操作的主要语句为( )A.s.elem[top]=e;s.top=s.top+1;B.s.elem[top+1]=e;s.top=s.top+1;C.s.top=s.top+1;s.elem[top+1]=e;D.s.top=s.top+1;s.elem[top]=e;SSS_SIMPLE_SINA B C D分值: 2答案:D5.一个数组的第一个元素的存储地址是100,每个元素占2个存储单元,则第5个元素的存储地址是( )A.110 B.108C.100 D.120SSS_SIMPLE_SINA B C D分值: 2答案:B6.已知某完全二叉树采用顺序存储结构,结点数据的存放顺序依次为A、B、C、D、E、F、G、H,该完全二叉树的后序遍历序列为( )A.HDBEFCGA B.HDEBFGCAC.DHEBFGACA D.DEHBFGCASSS_SIMPLE_SINA B C D分值: 2答案:B[解析] 本题主要考查的知识点是完全二叉树的后序遍历。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、章节作业第一章概论1.设计算法在整型数组A[n]中查找值为K的元素,若找到,则输出其位置i(0≤i≤n-1),否则输出-1作为标志,并分析算法的时间复杂度。
int search (int A[],int n,int k){ int i;i=0;while (i<=n-1)if (A[i]!=k) i++;else break;if (i<=n-1) return I;else return -1;}当查找成功时,A[i]与k比较次数≤n;当查找不成功时,A[i]与k比较n次,所以,算法时间复杂度T(n)=O(n)。
2.写出计算方阵A[n][n]与B[n][n]乘积C[n][n]的算法,分析算法的时间复杂度。
void matrixmultiply (int A[][n],int B[][n],int C[][n],int n){ int I,j;for (i=0;i<n;i++)for (j=0;j<n;j++){ C[i][j]=0;for (k=0;k<n;k++)C[i][j]+=A[i][j]*B[k][j];}}以方阵阶数n作为输出规模。
可知第二层循环中的第一条赋值语句共执行n2次,第三层循环体中的乘法和赋值语句共执行n3次,所以此算法的计算量为n3+n2,算法时间复杂T(n)=O(n3)第二章线性表1.设带头结点的单链表的结点结构如下:struct node { DataType data;struct node *next;} Node, *LinkList;试编写一个函数int count(LinkList head,DataType x)统计单链表中数据域为x的结点个数。
int count(LinkList head,DataType x){LinkList p=head->next;Int m=0;while (p!=NULL){ if(p->data==x) m++;p=p->next;}return m;}2.试分别以顺序表和带头结点的单链表作存储结构,各写一个实现线性表的就地(即使用尽可能少的附加空间)逆置的算法,在原表的存储空间将线性表(a1,a2,…,an)逆置为(an,an-1,…,a1)。
顺序表逆置算法void inverse_sqlist(Seqlist L) {int m,n,k;DataType temp;m=0; n=L.length-1;while (m<n){ temp=L.data[m];L.data[m]=L.data[n];L.data[n]=temp;m++;n--;}}带头结点的单链表的逆置算法reverse_2(LinkList head){LinkList p,q;p=head->next;head->next=NULL;while (p!=NULL){q=p->next;p->next=head->next;head->next=p;p=q;}}第三章栈、队列和数组1.有一个整数序列,其输入顺序为20,30,90,-10,45,78,试利用栈将其输出序列改变为30,-10,45,90,78,20,试给出该整数序列进栈和出栈的操作步骤。
(用push(x)表示x进栈,pop(x)表示x出栈)push(20),push(30),pop(30),push(90),push(-10),pop(-10),push(45),pop(45 ),pop(90),push(78),pop(78),pop(20)2.设有编号为1,2,3,4的四辆列车,顺序进入一个栈式结构的站台,试写出这四辆列车开出车站的所有可能的顺序。
一号列车先出站:1234,1243,1324,1342,1432;二号列车先出站:2134,2143,2314,2341,2431;三好列车先出站:3214,3241,3421;四号列车先出站:4321;但是这里的 4123、4132、4213、4231都不是正解,所以共有14种可能3.假设以带头结点的循环链表表示队列,并且只设一个指针指向队列尾结点(注意不设头指针),试编写相应的初始化队列、入队列和出队列算法。
类型定义:typedef struct linksd_queue{DataType data;struct linked_queue *next;} LqueueTp;队列的初始化void InitQueue(LqueueTp *rear){ LqueueTp *p;p=(LqueueTp *)malloc(sizeof(LqueueTp)); rear=p;rear->next=rear;}入队列void EnQueue(LqueueTp *rear;DataType x) { LqueueTp *p;p=(LqueueTp*)malloc(sizeof(LqueueTp)); p->data=x;p->next=rear->next;rear->next=p;rear=p}出队列OutQueue(LqueueTp *rear,DataType *x) { LqueueTp *h,*p ;if (rear==rear->next){ error; return 0; }else {h=rear->next;p=h->next;*x=p->data;h->next=p->next;if (p==rear)rear=h;free(p);return 1;}}4.假设以数组cycque[m]存放循环队列的元素,同时设变量rear和quelen分别指示循环队列中队列尾元素位置和含元素的个数。
试给出此循环队列的队列满和队列空的条件,并写出相应的入队列和出队列的算法。
类型定义:typedef struct cycqueue{DataType data[m];int rear;int quelen;} CycqueueTp;CycqueueTp *cq队列满条件是:(cq->quelen==m)。
队列空条件是:(cq->quelen==0)入队列:int EnCycQueue(CycqueueTp *cq;DataType x){if (cq->quelen==m){ error; return 0;}else {cq->rear=(cq->rear+1)%m;cq->data[cq->rear]=x;cq->quelen=cq->quelen+1;return 1;}}出队列:int OutCyQueue(CycqueueTp *cq){if (cq->quelen==0){ error; return 0;}else {cq->quelen=cq->quelen-1;*x=cq->data[(cq->rear+m-cq->quelen)% m]; return 1;}}取队列首元素:DataType GetHead(CycqueueTp *cq){ DataType x;x=cq->data[cq->rear=m-cq->quelen]% m];return x;}第四章树和二叉树1.算法设计题(1)以二叉链表作存储结构,试编写求二叉树叶子结点个数的算法。
typedef struct btnode{ DataType data;struct btnode *lchild,*rchild;}*BinTree;int leafnode_num(BinTree bt ){if (bt==NULL) return 0 ;elseif (bt->lchild==NULL) && (bt->rchild==NULL)return 1;elsereturn leafnode_num (bt->lchild)+leafnode_num (bt->rchild); }(2)设计算法求二叉树的结点的个数。
typedef struct btnode{DataType data;struct btnode *lchild,*rchild;}*BinTree;int node_num (BinTree bt){if (bt==NULL) return 0;elsereturn node_num(bt->lchild)+node_num(bt->rchild)+1;}(3)设计算法按先序次序打印二叉树T中叶子结点的值。
typedef struct btnode{ int data;struct btnode *lchild,*rchild;}*BinTree;void preorder (BinTree bt){ if (bt!=NULL){ if ((bt->lchild==NULL) && (bt->rchild==NULL))printf(“%d”,bt->dta);preorder(bt->lchild);preorder(bt->rchild);}}2.树的存储结构采用孩子兄弟链表,试编写树的按层次遍历算法typedef struct tnode{ int data;struct tnode *son,*brother;}*Tree;void tree_travel (Tree root ){ InitQueue(Q);if (root1=NULL){ EnQueue( q , root );while (!EmptyQueue(Q)){ p=GetHead(Q);OutQueue (Q);prinf(“%d” , p->data);p=p->son;while (p!=NULL){ Enqueue (Q , p);p=p->brother;}}}}第五章图1.求下列有向图中从顶点v o到其余各顶点的最短路径及长度(给出求解的过程)。
2.写出将一个无向图的邻接矩阵转换成邻接表的算法。
#define vnum 20typedef struct graph{ VertexType vexs[vnum];int arcs[vnum][vnum];int vexnum,arcnum;} GraphTp_Mat;typedef struct arcnode{int adjvex;struct arcnode *nextarc;} ArcNodeTp;typedef struct vexnode{ int vertex;ArcNodeTp *firstarc;AdjLis[vnum];typedef struct graph{ AdjLis adjlist;int vexnum,arcnum;} GraphTp_Adj;void Matrix_to_Adjlis(GraphTp_Mat *ga,GraphTp_Adj *gp) { int I,j;ArcNodeTp *p;gp->vexnum=ga->vexnum;gp->arcnum=ga->arcnum;for ( i =0;I<ga->vexnum;i++){ gp->adjlis[i].vertex=I;gp->adjlis[i].firstarc=NULL;}for (i=0;I<ga->vexnum;i++)for (j=0;j<ga->vesnum;j++)if (ga->arcs[i][j]==1)}p=(ArcNodeTp *)malloc(sizeof(ArcNodeTp));p->adjvex=j;p->nextarc=ga->adjlis[i].firstarc;ga->adjlis[i].firstarc=p;}}第六章查找1.假设线性表中结点是按键值递增的顺序排列,试写一顺序查找算法,将岗哨设在高下标端。