zoukankan      html  css  js  c++  java
  • 数据结构复习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、稀疏矩阵压缩存储后,必会失去随机存取功能(判断)

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

  • 相关阅读:
    删除Tomcat服务及其它注意
    下拉菜单被js图片挡住
    There are no resources that can be added or removed from the server
    Mysql存中文值乱码
    myeclipse的项目导入到eclipse下,com.sun.org.apache.commons.beanutils.BeanUtils不能导入
    No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing
    winServer2003除默认端口外的其他端口只能本地访问,关闭防火墙即可
    Oracle 11.2.0.3 on windows 2008 r2
    windows2008 r2 卸载GI
    初始化参数(Initialization Parameter)知识合集 based on 11g
  • 原文地址:https://www.cnblogs.com/hbiner/p/4763661.html
Copyright © 2011-2022 走看看