数据结构复习3

1papb哪个更快

#define NUMA 10000000

#define NUMB 1000

int a[NUMA], b[NUMB];

void pa()

{

    int i, j;

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

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

            ++a[j];

}

void pb()

{

    int i, j;

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

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

            ++b[j];

}

解析:pb更快。测试时pbpa快,数组a比数组b大很多,可能跨更多的页,缺页率高或者缓存命中更低,所以pb快。

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

解析:采用淘汰赛模式,经过三轮4+2+1=7次比较可以确定冠军(最大值)。

再在每轮比赛中曾经和冠军(最大值)比较过的三个数中,通过三次比较可以找出真正的亚军。(次大值)。因此共9次;

3、已知数组D的定义是int D[4][8];,现在需要把这个数组作为实参传递给一个函数进行处理。下列说明汇总可以作为对应的形参变量说明的是()。

Aint D[4][]

Bint *s[8]

Cint(*s)[8]

Dint D[][8]

解析:二维数组在内存中也是连续存储的,他可以通过 arr[i][j]寻址是因为我们定义了这个数组有多少列,加入有N列,这样数组寻址的时候编译器会自动得到 *(arr+(j*N)+i)所以传参数的时候列数必须指定。所以D正确A不正确。B表示有8个指向int指针的数组,不对,而C(*s)等价于s[]。因此答案CD

4、稀疏矩阵指的是矩阵中非零元素很少的矩阵,具体少到什么程度呢?非零元素所占比例小于等于5%称为稀疏矩阵。这个时候如果用二维数组储存就太浪费空间了。所以用三元组(行,列,值)储存其中的非零元素。一个三元组就可以唯一确定一个非零元素。一组三元组加上矩阵的行、列值就可以确定这个矩阵了。三元组中除了存储非0元素的行列值外,还要存储矩阵的行数列数,总元素数三者的信息。

5、哈希表 支持直接通过关键码得到值 其实数组就是一种哈希表 下标就是关键码 通过下标直接得到值 因此哈希表肯定需要做范围检查 也有办法做范围检查的  支持直接通过关键码得到值 其实数组就是一种哈希表 下标就是关键码 通过下标直接得到值 因此哈希表肯定需要做范围检查 也有办法做范围;

6、在一个元素个数为N的数组里,找到升序排在N/5位置的元素的最优算法时间复杂度是O(n)BFPRT算法可以做到或者桶排基排之类的。

7、既希望较快的查找又便于线性表动态变化的查找方法是()

A顺序查找

B折半查找

C索引顺序查找

D哈希法查找

解析:选D

8、 关于 int a[10]; 问下面哪些不可以表示 a[1] 的地址?

A  a+sizeof(int)

B  &a[0]+1

C  (int*)&a+1

D  (int*)((char*)&a+sizeof(int))

解析:sizeof(int)=4,因此Aa+4错误。BC明显对,D由于先转成了char型,加4个偏移量刚好是a[1],因此是正确的。

9、下面数据结构能够支持随机的插入和删除操作、并具有较好的性能的是____

数组和链表

链表和哈希表

哈希表和队列

队列和堆栈

堆栈和双向队列

双向队列和数组

解析:数组和队列都可以排除,数组的好处是随机存取,如果要是随机插入和删除的话要移动大量元素;队列的好处是在头删除、尾插入,不适于随机插入和删除。(1)链表为什么可以呢?链表只需要把插入和删除位置附近的指针修改一下就OK(2)哈希表为什么可以呢?插入的话,直接通过哈希函数找到对应的位置,如果冲突的话,稍作处理就可以了;同样删除的话,也是找到指定元素的位置,看当前位置是否是该元素(有可能冲突),如果是,直接删除,如果不是,根据选择的解决冲突的策略很容易找到该元素。

10、下列说法错误的是

数组是一种对象

数组属于一种原生类

C int number=[]={31,23,33,43,35,63}

D数组的大小可以任意改变

解析:Java中的那些基本类型属于原生类,而数组是引用类型,不属于原生类,可以看成是一种对象。而C中的数组声明和初始化的格式不对。组的大小一旦指定,就不可以进行改变。因此BCD

11、稀疏矩阵压缩存储后,必会失去随机存取功能(判断)

解析:稀疏矩阵在采用压缩存储后将会失去随机存储的功能。因为在这种矩阵中,非零元素的分布是没有规律的,为了压缩存储,就将每一个非零元素的值和它所在的行、列号做为一个结点存放在一起,这样的结点组成的线性表中叫三元组表,它已不是简单的向量,所以无法用下标直接存取矩阵中的元素。

原文地址:https://www.cnblogs.com/hbiner/p/4763661.html