0
点赞
收藏
分享

微信扫一扫

大厂学院 - 大厂算法和数据结构解析

资料已上传B站

​​https://space.bilibili.com/1911355757​​

一起学习

大厂学院 - 大厂算法和数据结构解析 - 数组和集合的区别

一、数组声明了它容纳的元素的类型,而集合不声明。


二、数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合是可以动态扩展容量,可以根据需要动态改变大小,集合提供更多的成员方法,能满足更多的需求。


三、数组的存放的类型只能是一种(基本类型/引用类型),集合存放的类型可以不是一种(不加泛型时添加的类型是Object)。


四、[endif]数组是java语言中内置的数据类型,是线性排列的,执行效率或者类型检查都是最快的


大厂学院 - 大厂算法和数据结构解析 - 递推法与递归法区别

递推法


递推是序列计算机中的一种常用算法。它是按照一定的规律来计算序列中的每个项,通常是通过计算机前面的一些项来得出序列中的指定项的值。其思想是把一个复杂的庞大的计算过程转化为简单过程的多次重复,该算法利用了计算机速度快和不知疲倦的机器特点。


递归法


程序调用自身的编程技巧称为递归(recursion)。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。


注意:


(1) 递归就是在过程或函数里调用自身;


(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口


大厂学院 - 大厂算法和数据结构解析 - 笔试题

数据结构试题及答案


一、单项选择题


(1) 一个算法应该是(B )。


A) 程序 B) 问题求解步骤的描述


C) 要满足五个基本属性 D) A和C


(2) 算法指的是( D )。


A) 计算机程序 B) 解决问题的计算方法


C) 排序算法 D) 解决问题的有限运算序列。


(3) 与数据元素本身的形式、内容、相对位置、个数无关的是数据的( B)。


A) 存储结构 B) 逻辑结构 C) 算法 D)操作


(4) 从逻辑上可以把数据结构分为( C )两大类。


A) 动态结构、静态结构 B) 顺序结构、链式结构


C) 线性结构、非线性结构 D) 初等结构、构造型结构


(5) 下列叙述中正确的是( D )。


A)一个逻辑数据结构只能有一种存储结构


B)数据的逻辑结构属于线性结构,存储结构属于非线性结构


C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率


D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率


(6) 数据的基本单位是(  A )


  A) 数据项                   B) 数据类型               C) 数据元素               D) 数据变量

(7) 下列程序的时间复杂度为(   )


i=0;s=0;


while(s<n)


{ i++;s=s+i;}


A) O() B) O() C) O(n) D) O(n2)


(8) 下列程序段的渐进时间复杂度为( )。


for( int i=1;i<=n;i++)


 for( int j=1;j<= m; j++)


    A[i][j] = i*j ;

A)O(m2) B)O(n2) C)O(m*n) D)(m+n)


(9) 程序段如下:


sum=0;


for(i=1;i<=n;i++)


  for(j=1;j<=n;j++)


        sum++;

其中 n为正整数,则最后一行的语句频度在最坏情况下是( C )。


A)O(n) B) O(nlogn) C) O(n3) D) O(n2)


(10) 在下面的程序段中,对x的赋值语句的频度为( C )。


for ( i=1; i>=n ; i++)


    for   ( j=1;   j>=n ;  j++)


    x:=x+1;

A) O(2n) B)O(n) C) O(n2) D) O(log2n)


(11) 程序段 for ( i:=n-1; i<=1; i–)


       for   ( j:=1;   j>=i ;  j++)


          if   (a[j]>a[j+1]  )    

{ t=a[j]; a[j]= a[j+1]; a[j+1]= t; }


其中 n为正整数,则最后一行的语句频度在最坏情况下是(D )。


A) O(n) B) O(nlogn) C) O(n3) D) O(n2)


(12) 设有一个递归算法如下:


int fact(int n)


{ /* 大于等于0 */


if ( n<=0 )  return  1  ;


else  return  n*fact (n-1)  ;

}


则计算fact(n)需要调用该函数的次数为( B )。


A) n B) n+1 C) n+2 D) n-1


(13) 下述程序段中语句①的频度是(  C )。


s=0;


for(i=1;i<m;i++)


for(j=0;j<=i;j++)


  s+=j;

A) B) C) D)


(14) 若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则最节省运算时间的存储方式是(  D )。


A)单链表 B)仅有头指针的单循环链表


C)双链表 D)仅有尾指针的单循环链表


(1) 求循环链表中当前结点的后继和前驱的时间复杂度分别是( C )。


A) O(n)和O(1) B) O(1)和O(1) C) O(1)和O(n) D) O(n)和O(n)


(15) 求单链表中当前结点的后继和前驱的时间复杂度分别是(  )。


A) O(n)和O(1)                                         B) O(1)和O(1)


C) O(1)和O(n)                                         D) O(n)和O(n)

(16) 非空的单循环链表的头指针为head,尾指针为rear,则下列条件成立的是(A  )。


A) rear->next= =head                                         B) rear->next->next= =head


C) head->next= =rear                                         D) head->next->next= =rear

(17) 从一个长度为n的顺序表中删除第i个元素(1≤i≤n)时,需向前移动的元素的个数是(A  )。


A)n-i B)n-i+1 C)n-i-1 D)i


(18) 已知一个有序表为(13,18,24,35,47,50,62,83,90,115,134),当二分检索值为90的元素时,检索成功需比较的次数是(  )。


A)1 B)2 C)3 D)4


(19) 假设以行优先顺序存储三维数组R[6][9][6],其中元素R[0][0][0]的地址为2100,且每个元素占4个存储单元,则存储地址为2836的元素是(  )。


A) R[3][3][3] B) R[3][3][4] C) R[4][3][5] D) R[4][3][4]


(20) 设有一个10阶的对称矩阵A,采用压缩存储方式以行序为主序存储,a00为第一个元素,其存储地址为0,每个元素占有1个存储地址空间,则a45的地址为(  )。


A) 13 B) 35 C) 17 D) 36


(21) 线性表采用链式存储时,节点的存储的地址( B )。


A) 必须是不连续的 B) 连续与否均可


C) 必须是连续的 D) 和头节点的存储地址相连续


(22) 用链表表示线性表的优点是( D )。


A) 便于随机存取 B) 花费的存储空间比顺序表少


C) 数据元素的物理顺序与逻辑顺序相同 D) 便于插入与删除


(23) 链表不具有的特点是(B ) 。


A) 插入、删除不需要移动元素 B) 可随机访问任一元素


C) 不必事先估计存储空间 D) 所需空间与线性长度成正比


(24) 在长度为n的顺序表中删除第i个元素(1≤i≤n)时,元素移动的次数为( D )。


A) n-i+1     B) i   C) i+1      D) n-i


(25) 采用顺序搜索方法查找长度为n的顺序表示,搜索成功的平均搜索长度为( D )。


A) n    B) n/2   C) (n-1)/2      D) (n+1)/2


(26) 将长度为n的单链表链接在长度为m的单链表之后的算法的时间复杂度为( B )。


A) O(1) B) O(n) C) O(m) D) O(m+n)


(27) 若不带头结点的单链表的头指针为head,则该链表为空的判定条件是( A )。


A) headNULL    B) head->nextNULL C) head!=NULL   D) head->next==head


(28) 某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。


A) 单链表 B) 仅有头指针的单循环链表


C) 双链表 D) 仅有尾指针的单循环链表


(29) 若允许表达式内多种括号混合嵌套,则为检查表达式中括号是否正确配对的算法,通常选用的辅助结构是( A  )。


  A) 栈                          B) 线性表                   C) 队列                       D) 二叉排序树

(30) 顺序栈S中top为栈顶指针,指向栈顶元素所在的位置,elem为存放栈的数组,则元素e进栈操作的主要语句为( D  )。


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;


(31) 循环队列sq中,用数组elem[0··25]存放数据元素,sq.front指示队头元素的前一个位置,sq.rear指示队尾元素的当前位置,设当前sq.front为20,sq.rear为12,则当前队列中的元素个数为( C  )。


A) 8 B) 16 C) 17 D) 18


(32) 链式栈与顺序栈相比,一个比较明显的优点是( B )。


A) 插入操作更加方便 B) 通常不会出现栈满的情况


C) 不会出现栈空的情况 D) 删除操作更加方便


(33) 一个递归的定义可以用递归过程求解,也可以用非递归过程求解,但单从运行时间来看,通常递归过程比非递归过程( B )。


A) 较快 B) 较慢 C) 相同 D) 不定


(34) 若已知一个栈的入栈序列是1,2,3,4……n,其输出序列为p1,p2,p3,……pn,若p1= =n,则pi为( C )。


  A) i                        B) n= =i                C) n-i+1                 D) 不确定

(35) 一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是( C ) 。


A) edcba B) decba C) dceab D) abcde


(36) 若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则不可能出现的出栈序列是( D )。


A) 2,4,3,1,5,6   B) 3,2,4,1,6,5


C) 4,3,2,1,5,6    D) 2,3,5,1,6,4


(37) 对于栈操作数据的原则是( B )。


A) 先进先出 B) 后进先出 C) 后进后出 D) 不分顺序


(38) 栈和队列的共同点是( C )。


A) 都是先进先出 B) 都是先进后出


C) 只允许在端点处插入和删除元素 D) 没有共同点


(39) 一个队列的入队序列是1,2,3,4,则队列的输出序列是( B )。


A) 4,3,2,1 B) 1,2,3,4 C)1,4,3,2 D) 3,2,4,1


(40) 设数组data[m]作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执行出对操作后其头指针front值为(D )。


A) front=front+1 B) front=(front+1)%(m-1)


C) front=(front-1)%m D) front=(front+1)%m


(41) 引起循环队列队头位置发生变化的操作是( A )。


A) 出队 B) 入队   C) 取队头元素 D) 取队尾元素


(2) 设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为( A )。


A)(rear-front+m)%m B)rear-front+1 C)(front-rear+m)%m D)(rear-front)%m


(42) 二维数组A[12][18]采用列优先的存储方法,若每个元素各占3个存储单元,且A[0][0]地址为150,则元素A[9][7]的地址为( A )。


A) 429      B) 432   C) 435       D) 438


(43) 设有一个10阶的对称矩阵A[10][10],采用压缩方式按行将矩阵中下三角部分的元素存入一维数组B[]中,A[0][0]存入B[0]中,则A[8][5]在B[]中( C )位置。


A) 32 B) 33   C) 41 D) 65


(44) 若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1…(n(n+1))/2]中,则在B中确定aij(i<j)的位置k的关系为( A )。


A) i*(i-1)/2+j B) j*(j-1)/2+i C) i*(i+1)/2+j D) j*(j+1)/2+i


(45) 对稀疏矩阵进行压缩存储目的是( C )。


A) 便于进行矩阵运算 B) 便于输入和输出


C) 节省存储空间 D) 降低运算的时间复杂度


(46) 对广义表L=((a,b),(c,d),(e,f))执行操作tail(tail(L))的结果是( B)。


A) (e,f)     B) ((e,f))   C) (f)       D) ( )


(47) 设广义表L=((a,b,c)),则L的长度和深度分别为( C )。


A) 1和1 B) 1和3 C) 1和2 D) 2和3


(48) 树中所有结点的度之和等于所有结点数加( C )。


A) 0 B)1 C) -1 D) 2


(49) 在一棵具有n个结点的二叉链表中,所有结点的空域个数等于( C )。


A) n B) n-1 C) n+1 D) 2*n


(50) 某二叉树的先序序列和后序序列正好相反,则该二叉树一定是(B )的二叉树。


A) 空或只有一个结点 B) 高度等于其节点数


C) 任一结点无左孩子 D) 任一结点无右孩子


(51) 含有10个结点的二叉树中,度为0的结点数为4,则度为2的结点数为(   )


A)3 B)4 C)5 D)6


(52) 除第一层外,满二叉树中每一层结点个数是上一层结点个数的(   )


A)1/2倍 B)1倍 C) 2倍 D) 3倍


(53) 对一棵有100个结点的完全二叉树按层编号,则编号为49的结点,它的父结点的编号为(   )


A)24 B)25 C)98 D)99


(54) 可以惟一地转化成一棵一般树的二叉树的特点是(   )


A)根结点无左孩子 B)根结点无右孩子 C)根结点有两个孩子 D)根结点没有孩子


(55) 设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为(B )。


A) 2h B) 2h-1 C) 2h+1 D) h+1


(56) 在一棵度为3的树中,度为3的节点个数为2,度为2的节点个数为1,则度为0的节点个数为(C )。


  A) 4                        B) 5                        C) 6                        D) 7

(57) 设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F中第一棵 子树的结点个数是( A )。


A)m-n B)m-n-1 C) n+1 D) 条件不足,无法确定


(58) 将一株有100个节点的完全二叉树从上到下,从左到右依次进行编号,根节点的编号为1,则编号为49的节点的 左孩子编号为(A)。


A) 98 B) 89 C) 50 D) 没有孩子


(60) 树最适合用来表示( C )。


A) 有序数据元素 B) 无序数据元素


  C) 元素之间具有分支层次关系的数据          D) 元素之间无联系的数据

(61) 在一个非空二叉树的中序遍历序列中,根结点的右边( A )。


  A) 只有右子树上的所有结点                   B) 只有右子树上的部分结点

C) 只有左子树的上的部分结点 D) 只有左子树上的所有结点


(62) 任何一棵二叉树的叶结点在先序、中序和后序遍历序列中相对次序( D )。


  A) 不发生改变        B) 发生改变           C) 不能确定           D) 以上都不对

(63) 在有n个叶子结点的哈夫曼树中,其结点总数为( D )。


  A) 不确定               B) 2n                       C) 2n+1                  D) 2n-1

(64) 权值为{1,2,6,8}的四个结点构成的哈夫曼树的带权路径长度是( D )。


  A) 18                       B) 28                       C) 19                       D) 29

(65) 对一个满二叉树,m个树叶,k个分枝结点,n个结点,则( D )。


  A) n=m+1                B) m+1=2n              C) m=k-1                 D) n=2k+1

(66) 在含有n个顶点和e条边的无向图的邻接矩阵中,零元素的个数为( D )。


A) e B) 2e C) n2-e D) n2-2e


(67) 若采用邻接矩阵翻存储一个n个顶点的无向图,则该邻接矩阵是一个( D )。


  A) 上三角矩阵        B) 稀疏矩阵            C) 对角矩阵           D) 对称矩阵

(68) 在一个图中,所有顶点的度数之和等于所有边数的( C )倍。


  A) 1/2                      B) 1                        C) 2                        D) 4

(69) 在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的( B )倍。


  A) 1/2                      B) 1                        C) 2                        D) 4

(70) 对于含n个顶点和e条边的图,采用邻接矩阵表示的空间复杂度为(   )。


A) O(n) B) O(e) C) O(n+e) D) O(n2)


(71) 如果求一个连通图中以某个顶点为根的高度最小的生成树,应采用(   )。


A) 深度优先搜索算法 B) 广度优先搜索算法


C) 求最小生成树的prim算法 D) 拓扑排序算法


(72) n个顶点的连通图至少中含有( A )。


  A) n-1                     B) n                        C) n+1                    D) 0

(73) n个顶点的完全有向图中含有( D )。


A) n-1条有向边   B) n条有向边 C) n(n-1)/2条有向边 D) n(n-1)条有向边


(74) 假设一个有n个顶点和e条弧的有向图用邻接表表示,则删除预某个顶点vi相关的所有弧的时间复杂度是( C )。


  A) O(n)                    B) O(e)                    C) O(n+e)                D) O(n*e)      

(75) 在无向图中定义顶点Vi域Vj之间的路径为从Vi到达Vj的一个( A )。


A) 顶点序列 B) 边序列 C) 权值总和 D) 边的条数


(76) 无向图G=(V,E),其中:V={a,b,c,d,e,f}, E={(a,b),(a,e),(a,c),(b,e),(c,f), (f,d),(e,d)},对该图进行深度优先遍历,得到的顶点序列正确的是( D )。


A) a,b,e,c,d,f B) a,c,f,e,b,d C) a,e,b,c,f,d D) a,e,d,f,c,b


(77) 下面哪一方法可以判断出一个有向图是否有环(回路)B。


A) 求节点的度 B) 拓扑排序 C) 求最短路径 D) 求关键路径


(78) 图的广度优先搜索类似于树的( B )次序遍历。


A) 先根 B) 中根 C) 后根 D) 层次


(79) 在图采用邻接表存储时,求最小生成树的 Prim 算法的时间复杂度为( B )。


A) O(n) B) O(n+e) C) O(n2) D) O(n3)


(80) 已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7},E={<V1,V2>,<V1,V3>,<V1,V4>, <V2,V5>,<V3,V5>,<V3,V6>,<V4,V6>,<V5,V7>,<V6,V7>},G的拓扑序列是( A )。


A) V1,V3,V4,V6,V2,V5,V7 B) V1,V3,V2,V6,V4,V5,V7


C) V1,V3,V4,V5,V2,V6,V7 D) V1,V2,V5,V3,V4,V6,V7


(81) 关键路径是事件结点网络中( A )。


A) 从源点到汇点的最长路径 B) 从源点到汇点的最短路径


C) 最长回路 D) 最短回路


(82) 有n个结点的有向完全图的弧数是( C  )。


A) n2 B) 2n C) n(n-1) D) 2n(n+1)

-----------------------------------

举报

相关推荐

0 条评论