




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第1111章章 查找查找查找(查找(Searching)又称检索,就是从一个数据元素集)又称检索,就是从一个数据元素集合中找出某个特定的数据元素。它是数据处理中经常使用的合中找出某个特定的数据元素。它是数据处理中经常使用的一种重要操作,尤其是当所涉及的数据量较大时,查找算法一种重要操作,尤其是当所涉及的数据量较大时,查找算法的优劣对整个软件系统的效率影响是很大的。的优劣对整个软件系统的效率影响是很大的。11.1 11.1 查找表查找表查找表(查找表(Search Table)是由同一类型的数据元素(或)是由同一类型的数据元素(或记录)构成的集合。由于表中数据元素之间存在着完全松散记录)构成的
2、集合。由于表中数据元素之间存在着完全松散的关系,因此查找表是一种非常灵便的数据结构。对查找表的关系,因此查找表是一种非常灵便的数据结构。对查找表进行的操作有以下进行的操作有以下4种:种:(1)查询某个特定的数据元素是否在查找表中;)查询某个特定的数据元素是否在查找表中;(2)检索某个特定的数据元素的各种属性;)检索某个特定的数据元素的各种属性;(3)在查找表中插入一个数据元素;)在查找表中插入一个数据元素;(4)从查找表中删除某个数据元素。)从查找表中删除某个数据元素。11.2 11.2 静态查找表静态查找表静态查找表是数据元素的线性表,可以是基于数组的静态查找表是数据元素的线性表,可以是基于
3、数组的顺序存储或以线性链表存储。在顺序存储或以线性链表存储。在C语言中可描述如下:语言中可描述如下:typedef structElemType elem;int length;SSTBL;typedef struct NODEElemType elem;struct NODE *next;NodeType;11.2.1 11.2.1 顺序查找顺序查找顺序查找又称线性查找,是最基本的查找方法之一。顺序查找又称线性查找,是最基本的查找方法之一。其查找过程为:从表的一端开始,向另一端逐个按给定值其查找过程为:从表的一端开始,向另一端逐个按给定值kx与数据元素的关键字与数据元素的关键字key进行比较
4、。若找到,查找成功,并进行比较。若找到,查找成功,并返回数据元素在表中的位置;若整个表查找完,仍未找到与返回数据元素在表中的位置;若整个表查找完,仍未找到与kx相同的关键字,则查找失败,给出失败信息。相同的关键字,则查找失败,给出失败信息。以顺序存储为例,以顺序存储为例,0号单元留空,数据元素从下标为号单元留空,数据元素从下标为1的数组单元开始存放。的数组单元开始存放。11.2.2 11.2.2 有序表的折半查找有序表的折半查找有序表即是表中数据元素按关键字升序或降序排列。折半有序表即是表中数据元素按关键字升序或降序排列。折半查找的思想为:在有序表中,取中间元素作为比较对象,若给查找的思想为:
5、在有序表中,取中间元素作为比较对象,若给定值与中间元素的关键字相等,则查找成功;若给定值小于中定值与中间元素的关键字相等,则查找成功;若给定值小于中间元素的关键字,则在中间元素的左半区继续查找;若给定值间元素的关键字,则在中间元素的左半区继续查找;若给定值大于中间元素的关键字,则在中间元素的右半区继续查找。不大于中间元素的关键字,则在中间元素的右半区继续查找。不断重复上述查找过程,直到查找成功,或所查找的区间无数据断重复上述查找过程,直到查找成功,或所查找的区间无数据元素,查找失败。元素,查找失败。1算法分析算法分析2算法实现算法实现3性能分析性能分析 11.2.3 11.2.3 分块查找分块
6、查找分块查找又称索引顺序查找,是对顺序查找的一种改进。分分块查找又称索引顺序查找,是对顺序查找的一种改进。分块查找要求将查找表分成若干个子表,并对子表建立索引表,每块查找要求将查找表分成若干个子表,并对子表建立索引表,每一个子表由索引表中的索引项确定。索引项包括两个字段:关键一个子表由索引表中的索引项确定。索引项包括两个字段:关键字字段(存放对应子表中的最大关键字值);指针字段(存放指字字段(存放对应子表中的最大关键字值);指针字段(存放指向对应子表的指针),并且要求索引项按关键字字段有序。查找向对应子表的指针),并且要求索引项按关键字字段有序。查找过程:将表分成几块,块内无序,块间有序;先确
7、定待查记录所过程:将表分成几块,块内无序,块间有序;先确定待查记录所在块,再在块内查找。在块,再在块内查找。查找时,先用给定值查找时,先用给定值kx在索引表中检测索引项,以确定所在索引表中检测索引项,以确定所要进行的查找在查找表中的查找分块(由于索引项按关键字字段要进行的查找在查找表中的查找分块(由于索引项按关键字字段有序,可用顺序查找或折半查找),然后,再对该分块进行顺序有序,可用顺序查找或折半查找),然后,再对该分块进行顺序查找。查找。 11.3 11.3 动态查找表动态查找表二叉排序树二叉排序树动态查找表的特点是表结构本身在查找过程中动态生成,动态查找表的特点是表结构本身在查找过程中动态
8、生成,即对给定的关键字即对给定的关键字key,若表中存在其关键字等于,若表中存在其关键字等于key的记录,的记录,则查找成功返回,否则插入关键字等于则查找成功返回,否则插入关键字等于key的记录。的记录。二叉排序树(二叉排序树(Binary Sort Tree)可以是一棵空二叉树;)可以是一棵空二叉树;当它非空时,是满足下列性质的二叉树:当它非空时,是满足下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于根)若左子树不空,则左子树上所有结点的值均小于根结点的值;若右子树不空,则右子树上所有结点的值均大于根结点的值;若右子树不空,则右子树上所有结点的值均大于根结点的值。结点的值。
9、(2)左右子树也都是二叉排序树。)左右子树也都是二叉排序树。11.3.1 11.3.1 二叉排序树查找过程二叉排序树查找过程: : 从其定义可见,二叉排序树的查找过程如下。从其定义可见,二叉排序树的查找过程如下。(1)若查找树为空,查找失败。)若查找树为空,查找失败。(2)查找树非空,将给定值)查找树非空,将给定值kx与查找树的根结点关键与查找树的根结点关键字比较。字比较。(3 3)若相等,查找成功,结束查找过程。若相等,查找成功,结束查找过程。11.3.2 11.3.2 二叉排序树插入操作二叉排序树插入操作设待插入结点的关键字为设待插入结点的关键字为kx,为将其插入,先要在二,为将其插入,先
10、要在二叉排序树中进行查找。若查找成功,按二叉排序树定义,不叉排序树中进行查找。若查找成功,按二叉排序树定义,不用插入;查找不成功时,则插入之。因此,新插入结点一定用插入;查找不成功时,则插入之。因此,新插入结点一定是作为叶子结点添加上去的。构造一棵二叉排序树则是逐个是作为叶子结点添加上去的。构造一棵二叉排序树则是逐个插入结点的过程。插入结点的过程。11.3.3 11.3.3 二叉排序树删除操作二叉排序树删除操作和插入相反,删除在查找成功之后进行,而且要求在删除和插入相反,删除在查找成功之后进行,而且要求在删除二叉排序树上某个结点之后,仍然保持二叉排序树的特性。设二叉排序树上某个结点之后,仍然保
11、持二叉排序树的特性。设待删结点为待删结点为*p(p为指向待删结点的指针),其双亲结点为为指向待删结点的指针),其双亲结点为*f,分三种情况进行讨论。分三种情况进行讨论。*p结点为叶结点,只需将被删结点的双亲结点相应指针域结点为叶结点,只需将被删结点的双亲结点相应指针域改为空指针。改为空指针。*p结点只有左子树结点只有左子树pl或右子树或右子树pr。此时,只需用。此时,只需用pl或或pr替换替换*p结点即可。结点即可。*p结点既有左子树又有右子树,可按中序遍历保持有序进结点既有左子树又有右子树,可按中序遍历保持有序进行调整。行调整。11.3.4 11.3.4 二叉排序树的查找分析二叉排序树的查找
12、分析对于每一棵特定的二叉排序树,均可按照平均查找长对于每一棵特定的二叉排序树,均可按照平均查找长度的定义来求它的度的定义来求它的ASL值,显然,由值相同的值,显然,由值相同的n个关键字,个关键字,构造所得的不同形态的各棵二叉排序树的平均查找长构造所得的不同形态的各棵二叉排序树的平均查找长 度的度的值不同,甚至可能差别很大。值不同,甚至可能差别很大。例如,由关键字序列例如,由关键字序列1,2,3,4,5构造而得的二叉排构造而得的二叉排序树,序树,ASL=(1+2+3+4+5)/5=3。由关键字序列由关键字序列3,1,2,5,4构造而得的二叉排序树,构造而得的二叉排序树,ASL=(1+2+3+2+
13、3)/5=2.2对给定序列建立对给定序列建立二叉排序树,若左右子树均匀分布,二叉排序树,若左右子树均匀分布,则其查找过程类似于有序表的折半查找。若给定序列有序,则其查找过程类似于有序表的折半查找。若给定序列有序,则建立的二叉排序树就蜕化为单链表,其查找效率同顺序查则建立的二叉排序树就蜕化为单链表,其查找效率同顺序查找一样。因此对均匀的二叉排序树进行插入或删除结点后,找一样。因此对均匀的二叉排序树进行插入或删除结点后,应对其调整,使其依然保持均匀。应对其调整,使其依然保持均匀。11.4 11.4 动态查找表动态查找表平衡二叉树平衡二叉树平衡二叉树或者是一棵空树,或者是具有下列性质的平衡二叉树或者
14、是一棵空树,或者是具有下列性质的二叉排序树:它的左子树和右子树都是平衡二叉树,且左子二叉排序树:它的左子树和右子树都是平衡二叉树,且左子树和右子树高度之差的绝对值不超过树和右子树高度之差的绝对值不超过1。11.4.1 11.4.1 左单旋转左单旋转调整策略:调整后的子树除了各结点的平衡因子绝对值调整策略:调整后的子树除了各结点的平衡因子绝对值不超过不超过1,还必须是二叉排序树。由于结点,还必须是二叉排序树。由于结点c的左子树的左子树D可作为可作为结点结点a的右子树,将结点的右子树,将结点a为根的子树调整为左子树是为根的子树调整为左子树是B,右子,右子树是树是D,再将结点,再将结点a为根的子树调
15、整为结点为根的子树调整为结点c的左子树,结点的左子树,结点c为新的根结点。为新的根结点。平衡化调整操作判定:沿插入路径检查三个点平衡化调整操作判定:沿插入路径检查三个点a、c、E,若它们处于若它们处于“”直线上的同一个方向,则要作左单旋转,即以直线上的同一个方向,则要作左单旋转,即以结点结点c为轴逆时针旋转。为轴逆时针旋转。11.4.2 11.4.2 右单旋转右单旋转右单旋转与左单旋转类似,沿插入路径检查三个点右单旋转与左单旋转类似,沿插入路径检查三个点a、c、E,若它们处于,若它们处于“/”直线上的同一个方向,则要作右单旋转,直线上的同一个方向,则要作右单旋转,即以结点即以结点c为轴顺时针旋
16、转。为轴顺时针旋转。11.4.3 11.4.3 先左后右双向旋转先左后右双向旋转下图为插入前的子树,根结点下图为插入前的子树,根结点a的左子树比右子树高度的左子树比右子树高度高高1,待插入结点,待插入结点x将插入到结点将插入到结点b的右子树上,并使结点的右子树上,并使结点b的的右子树高度增右子树高度增1,从而使结点,从而使结点a的平衡因子的绝对值大于的平衡因子的绝对值大于1,导致结点导致结点a为根的子树平衡被破坏。为根的子树平衡被破坏。11.4.3 11.4.3 先左后右双向旋转先左后右双向旋转11.4.4 11.4.4 先右后左双向旋转先右后左双向旋转先右后左双向旋转和先左后右双向旋转对称。
17、先右后左双向旋转和先左后右双向旋转对称。在平衡的二叉排序树在平衡的二叉排序树T上插入一个关键字为上插入一个关键字为kx的新元素,的新元素,递归算法可描述如下。递归算法可描述如下。(1)若)若T为空树,则插入一个数据元素为为空树,则插入一个数据元素为kx的新结点作为的新结点作为T的根结点,树的深度增的根结点,树的深度增1;(2)若)若kx和和T的根结点关键字相等,则不进行插入;的根结点关键字相等,则不进行插入;(3)若)若kx小于小于T的根结点关键字,而且在的根结点关键字,而且在T的左子树中不的左子树中不存在与存在与kx有相同关键字的结点,则将新元素插入在有相同关键字的结点,则将新元素插入在T的
18、左子树的左子树上,并且当插入之后的左子树深度增加上,并且当插入之后的左子树深度增加1时,分别就下列情况时,分别就下列情况进行处理。进行处理。11.5 11.5 动态查找表动态查找表B-B-树和树和B+B+树树B-树是一种平衡的多路查找树,它在文件系统中很有树是一种平衡的多路查找树,它在文件系统中很有用用。B+树是应文件系统所需而产生的一种树是应文件系统所需而产生的一种B-树的变形树。树的变形树。11.5.1 B-11.5.1 B-树的定义树的定义一棵一棵m阶的阶的B-树,可以为空树,非空时是满足下列特性的树,可以为空树,非空时是满足下列特性的m叉树:叉树:1)树中每个结点至多有)树中每个结点至
19、多有m棵子树;棵子树;2)若根结点不是叶子结点,则至少有两棵子树;)若根结点不是叶子结点,则至少有两棵子树;3)除根结点之外的所有非终端结点至少有)除根结点之外的所有非终端结点至少有 m/2 棵子树;棵子树;4)所有的非终端结点中包含以下信息数据:()所有的非终端结点中包含以下信息数据:(n,A0,K1,A1,K2,Kn,An)11.5.2 B-11.5.2 B-树的查找树的查找类似二叉排序树的查找,所不同的是类似二叉排序树的查找,所不同的是B-树每个结点上树每个结点上是多关键字的有序表,在到达某个结点时,先在有序表中查是多关键字的有序表,在到达某个结点时,先在有序表中查找,若找到,则查找成功
20、;否则,到按照对应的指针信息指找,若找到,则查找成功;否则,到按照对应的指针信息指向的子树中去查找,当到达叶子结点时,则说明树中没有对向的子树中去查找,当到达叶子结点时,则说明树中没有对应的关键字,查找失败。即在应的关键字,查找失败。即在B-树上的查找过程是一个顺指树上的查找过程是一个顺指针查找结点和在结点中查找关键字交叉进行的过程。针查找结点和在结点中查找关键字交叉进行的过程。11.5.3 B-11.5.3 B-树上插入结点树上插入结点在在B-树上插入关键字与在二叉排序树上插入结点不同,树上插入关键字与在二叉排序树上插入结点不同,关键字的插入不是在叶结点上进行的,而是在最底层的某个关键字的插
21、入不是在叶结点上进行的,而是在最底层的某个非终端结点中添加一个关键字,若该结点上关键字个数不超非终端结点中添加一个关键字,若该结点上关键字个数不超过过m-1个,则可直接插入到该结点上;否则,该结点上关键个,则可直接插入到该结点上;否则,该结点上关键字个数至少达到字个数至少达到m个,因而使该结点的子树超过了个,因而使该结点的子树超过了m棵,这棵,这与与B-树定义不符。所以要进行调整,即结点的树定义不符。所以要进行调整,即结点的“分裂分裂”。方。方法为:关键字加入结点后,将结点中的关键字分成三部分,法为:关键字加入结点后,将结点中的关键字分成三部分,使得前后两部分关键字个数均大于等于,而中间部分只
22、有一使得前后两部分关键字个数均大于等于,而中间部分只有一个结点。前后两部分成为两个结点,中间的一个结点将其插个结点。前后两部分成为两个结点,中间的一个结点将其插入到父结点中。若插入父结点而使父结点中关键字个数超过入到父结点中。若插入父结点而使父结点中关键字个数超过m-1,则父结点继续分裂,直到插入某个父结点,其关键字,则父结点继续分裂,直到插入某个父结点,其关键字个数小于个数小于m。可见,。可见,B-树是从底向上生长的。树是从底向上生长的。11.5.4 B-11.5.4 B-树上删除结点树上删除结点分两种情况:分两种情况:(1)删除最底层结点中关键字)删除最底层结点中关键字(2)删除为非底层结
23、点中关键字)删除为非底层结点中关键字11.5.5 B+11.5.5 B+树树一棵一棵m阶的阶的B+树和树和m阶的阶的B-树的差异在于:树的差异在于:(1)有)有n棵子树的结点中含有棵子树的结点中含有n个关键字;个关键字;(2)所有的叶子结点中包含了全部关键字的信息,及)所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录的指针,且叶子结点本身依关键字指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大的顺序链接;的大小自小而大的顺序链接;(3)所有的非终端结点可以看成是索引部分,结点中)所有的非终端结点可以看成是索引部分,结点中仅含有其子树根结点中最大(或最小)关键字
24、。仅含有其子树根结点中最大(或最小)关键字。11.5.5 B+11.5.5 B+树树11.6 11.6 哈希表哈希表前面讨论的查找方法,由于数据元素的存储位置与关前面讨论的查找方法,由于数据元素的存储位置与关键字之间不存在确定的关系,因此查找时,需要进行一系列键字之间不存在确定的关系,因此查找时,需要进行一系列对关键字的查找比较,即对关键字的查找比较,即“查找算法查找算法”是建立在比较的基础是建立在比较的基础上的,查找效率由比较一次缩小的查找范围决定。理想的情上的,查找效率由比较一次缩小的查找范围决定。理想的情况是不经过任何比较,一次存取便能得到所查记录,即要求况是不经过任何比较,一次存取便能
25、得到所查记录,即要求关键字与数据元素间存在一一对应关系,通过这个关系,能关键字与数据元素间存在一一对应关系,通过这个关系,能很快地由关键字得到对应的数据元素位置。很快地由关键字得到对应的数据元素位置。11.6.1 11.6.1 哈希表与哈希方法哈希表与哈希方法选取某个函数,依该函数按关键字计算元素的存储位选取某个函数,依该函数按关键字计算元素的存储位置,并按此存放;查找时,由同一个函数对给定值置,并按此存放;查找时,由同一个函数对给定值kx计算计算地址,将地址,将kx与地址单元中元素关键字进行比,确定查找是与地址单元中元素关键字进行比,确定查找是否成功,这就是哈希方法否成功,这就是哈希方法(杂
26、凑法杂凑法);哈希方法中使用的转换;哈希方法中使用的转换函数称为哈希函数函数称为哈希函数(杂凑函数杂凑函数);按这个思想构造的表称为哈;按这个思想构造的表称为哈希表希表(杂凑表杂凑表)。对于对于n个数据元素的集合,总能找到关键字与存放地址个数据元素的集合,总能找到关键字与存放地址一一对应的函数。若最大关键为一一对应的函数。若最大关键为m,可以分配,可以分配m个数据元素个数据元素存放单元,选取函数存放单元,选取函数f(key)=key即可,但这样会造成存储空即可,但这样会造成存储空间的很大浪费,甚至不可能分配这么大的存储空间。通常间的很大浪费,甚至不可能分配这么大的存储空间。通常关键字的集合比哈
27、希地址集合大得多,因而经过哈希函数关键字的集合比哈希地址集合大得多,因而经过哈希函数变换后,可能将不同的关键字映射到同一个哈希地址上,变换后,可能将不同的关键字映射到同一个哈希地址上,这种现象称为冲突(这种现象称为冲突(Collision),映射到同一哈希地址上的),映射到同一哈希地址上的关键字称为同义词。可以说,冲突不可能避免,只能尽可关键字称为同义词。可以说,冲突不可能避免,只能尽可能减少。能减少。11.6.2 11.6.2 常用的哈希函数常用的哈希函数下面介绍几种构造哈希函数常用的方法,重点掌握下面介绍几种构造哈希函数常用的方法,重点掌握直直接定址法和除留余数法。接定址法和除留余数法。1
28、直接定址法直接定址法2除留余数法除留余数法3数字分析法数字分析法4平方取中法平方取中法5折叠法(折叠法(Folding)11.6.3 11.6.3 处理冲突的方法处理冲突的方法在哈希函数中,当取不同的在哈希函数中,当取不同的key值时,却得到相同的函值时,却得到相同的函数值,冲突就产生了,那么如何处理这种冲突呢?最基本的数值,冲突就产生了,那么如何处理这种冲突呢?最基本的处理冲突的方法是:开放定址法、再哈稀法和拉链法。前者处理冲突的方法是:开放定址法、再哈稀法和拉链法。前者是将所有结点均存放在散列表是将所有结点均存放在散列表T0.m-1中;后者通常是将互中;后者通常是将互为同义词的结点链成一个
29、单链表,而将此链表的头指针放在为同义词的结点链成一个单链表,而将此链表的头指针放在散列表散列表T0.m-1中。中。1开放定址法开放定址法2再哈希法再哈希法3拉链法拉链法11.6.4 11.6.4 哈希表的查找分析哈希表的查找分析哈希表的查找过程基本上和造表过程相同。一些关键哈希表的查找过程基本上和造表过程相同。一些关键字可通过哈希函数转换的地址直接找到,另一些关键字在哈字可通过哈希函数转换的地址直接找到,另一些关键字在哈希函数得到的地址上产生了冲突,需要按处理冲突的方法进希函数得到的地址上产生了冲突,需要按处理冲突的方法进行查找。在介绍的三种处理冲突的方法中,产生冲突后的查行查找。在介绍的三种
30、处理冲突的方法中,产生冲突后的查找仍然是给定值与关键字进行比较的过程。所以,对哈希表找仍然是给定值与关键字进行比较的过程。所以,对哈希表查找效率的量度,依然用平均查找长度来衡量。查找效率的量度,依然用平均查找长度来衡量。查找过程中,关键字的比较次数,取决于产生冲突的查找过程中,关键字的比较次数,取决于产生冲突的多少,产生的冲突少,查找效率就高,产生的冲突多,查找多少,产生的冲突少,查找效率就高,产生的冲突多,查找效率就低。因此,影响产生冲突多少的因素,也就是影响查效率就低。因此,影响产生冲突多少的因素,也就是影响查找效率的因素。影响产生冲突多少有以下三个因素:哈希函找效率的因素。影响产生冲突多少有以下三个因素:哈希函数是否均匀、处理冲突的方法及哈希表的装填因子。数是否均匀、处理冲突的方法及哈希表的装填因子。11.7 11.7 算法设计举例算法设计举例下面给出二叉排序树、哈希表应用的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 财务决策逻辑分析的实践试题及答案
- C++常见程序设计模式试题及答案
- 2025关于房屋买卖合同协议范本
- 计算机二级Python重点面试试题及答案
- 财务成本管理理论的逻辑推演试题及答案
- 计算机二级VB行业趋势观察试题及答案
- 逻辑思维中的实务问题试题及答案
- 逻辑课程的全面分析试题及答案
- 计算机二级Delphi解决方案试题及答案
- 2025年二级考试回顾试题及答案总结
- 课件6:环控电控柜主要部件-马达保护器
- 2024年中考语文记述文阅读题答题模板及练习:人称及其作用分析(原卷版)
- 高空吊板作业专项方案
- 事业单位员工保密协议书范本(2024版)
- 小学生偏旁部首所表示的意义
- 七年级历史上册 第一单元 单元测试卷(人教版 2024年秋)
- JG-T+502-2016环氧树脂涂层钢筋
- 业务协作费用协议书
- CJJ99-2017 城市桥梁养护技术标准
- 国际金融(吉林大学)智慧树知到期末考试答案章节答案2024年吉林大学
- 高处作业安全施工方案
评论
0/150
提交评论