习题总结007

这篇博客总结了关于Java数组的相关习题,包括数组的引用、与线性表的区别、查找方法、循环队列的操作,以及递归、数据结构在算法中的应用等知识点。同时,讲解了如何在数组操作中保持原数组不变或改变原数组的方法。

1. 定义了一维 int 型数组 a[10] 后,下面错误的引用是( C  )

A.a[0] = 1;

B.a[0] = 5*2;

C.a[10] = 2;

D.a[1] = a[2] * a[0];

解析:数组的角标是从0开始的,一维数组中一共10个元素,所以最后一个元素的角标应该是9。

 

2.一维数组与线性表的区别是(  A  )。

A.前者长度固定,后者长度可变

B.后者长度固定,前者长度可变

C.两者长度均固定

D.两者长度均可变

解析:数组的长度是固定不变的,我们定义多少就是多少。但是数组是线性表的一种,线性表形式多样,长度可变。

 

3.下列哪个查找方法的平均查找长度与查找表中数据元素个数无关?( A )

A.哈希(散列)查找

B.顺序查找

C.折半查找

D.B+树查找

解析:顺序查找方法和折半查找方法的平均查找长度都与元素的个数有关,由于散列结构是由事先准备好的散列函数关系与处理冲突的方法来确定数据元素在散列表中的存储位置的,因此散列表查找方法的平均查找长度与元素的个数无关。

 

4.若已定义: int a[]=[0,1,2,3,4,5,6,7,8,9],*p=a,i; 其中0≤i≤9,则对a数组错误的引用是( D )

A.a[p-a]

B.*(&a[i])

C.p[i]

D.a[10]

解析:角标最大为9。

 

5.众里寻他千百度,蓦然回首,那人却在灯火阑珊处。——辛弃疾《青玉案》描述的是( B )

A.贪心

B.回溯

C.穷举

D.分治

E.递归

解析:回溯算法是一种试探法,基本思路是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。这正符合辛弃疾《青玉案》的笔意。

 

6.循环队列SQ的存储空间是数组d[m],队头、队尾指针分别是front和rear,则执行出队后其头指针front值是( D )

A.front=front+1

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

C.front=(front-1)%m

D.front=(front+1)%m

解析:

进队:队尾指针(rear+1)%m

出队:对头指针(front+1)%m

m为数组容量

 

7.公司里面有1001个员工,现在要在公司里面找到最好的羽毛球选手,也就是第一名,每个人都必须参赛,问至少要比赛多少次才能够找到最好的羽毛球员工。( B )

A.1001

B.1000

C.500

D.501

解析:

两两组合,多余的在单出后加入

1:分成500组,1人空出(500次,淘汰500人)

2:250组,空1人(250次,淘汰250人)

3:125组,空1人(125次,淘汰125人)

4:63组         (63次,淘汰63人)

5:31组,空1人  (31次)

6:16组          (16次)

7:8组           (8次)

8:4组           (4次)

9:2组            (2次)

10:1组            (1次,得出冠军)

 

结果:

如果是两两比赛,次数是:500+250+125+63+31+16+8+4+2+1 = 1000次

如果是场次,次数是:10场比赛

 

8.哪种数据结构用于执行递归调用( C  )

A.数组

B.链表

C.堆栈

D.二叉树

解析:题目是说用于执行,而不是这种数据结构本身需要递归。递归的展开和回归就是栈的特点,即先进后出,最里层的递归后返回。

 

9.将数组 var a=[1,2,3] 变成数组 [4,3,2,1] 下面的方式正确的是?( AC )

A.a.reverse().unshift(4)

B.a.push(4).reverse()

C.a.push(4); a.reverse()

D.a.splice(3,1,4).reverse()

解析:

本题需要将数组a=[1,2,3]变成[1,2,3,4],需要改变原数组a。

Array对象常用方法中:

不改变原数组:

1、 concat()

  • 连接两个或多个数组
  • 不改变原数组
  • 返回被连接数组的一个副本

2、join()

  • 把数组中所有元素放入一个字符串
  • 不改变原数组
  • 返回字符串

3、 slice()

  • 从已有的数组中返回选定的元素
  • 不改变原数组
  • 返回一个新数组

4、 toString()

  • 把数组转为字符串
  • 不改变原数组
  • 返回数组的字符串形式

改变原数组:

5、 pop()

  • 删除数组最后一个元素,如果数组为空,则不改变数组,返回undefined
  • 改变原数组
  • 返回被删除的元素


6、 push()

  • 向数组末尾添加一个或多个元素
  • 改变原数组
  • 返回新数组的长度

7、 reverse()

  • 颠倒数组中元素的顺序
  • 改变原数组
  • 返回该数组

8、 shift()

  • 把数组的第一个元素删除,若空数组,不进行任何操作,返回undefined
  • 改变原数组
  • 返回第一个元素的值

9、 sort()

  • 对数组元素进行排序(ascii)
  • 改变原数组
  • 返回该数组

10、 splice()

  • 从数组中添加/删除项目
  • 改变原数组
  • 返回被删除的元素

11、 unshift()

  • 向数组的开头添加一个或多个元素
  • 改变原数组
  • 返回新数组的长度

 

A选项,a.reverse()后返回值即数组a变成[3,2,1],再使用unshift()方法在数组开头添加一个4,a数组就变成了[4,3,2,1]。注,unshift()返回新数组的长度,此处为4。正确。

B选项,push()方法返回新数组的长度,是一个number类型,不是数组,所以不能再用“.”操作符继续执行reverse()方法。错误。

C选项,正确。

D选项,splice()语法:arrayObject.splice(index,howmany,item1,.....,itemX)。

 

10.在一个有8个int数据的数组中,随机给出数组的数据,找出最大和第二大元素一定需要进行几次比较(  B   )

A.8

B.9

C.10

D.11

解析:第一次分组8个分成4组,两两一组,比4次;第二次分组为上面比较下来的4个,还是两两分组,分2组;第三次分组就剩下两个,直接比较出了最大。这时一共比较了4+2+1=7次。接着拿第三次分组中与最大比较的那个数分别和之前与最大那个数比较过的数比较,分别是第一次分组有一个,第二次分组有一个,7+2=9 。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值