2、数组(线性表)特点和应用分析

   在计算机内存组织中,只有两种数据存储的基本方式:数组和链表。

<1>数组管理

int  a[100];
//就是在内存中申请100个连续的sizeof(int)空间。
int *p = malloc(100*sizeof(int));
//在堆中申请100个连续的int空间。

  要对空间进行访问:得到第10个成员。a[10],o(1)的成员访问时间。

  例如:100个空间是无序的,查找某一个数,必须遍历,从0......99.

  如果在这100个空间中插入/删除一个数组,需要将后面的所有成员后移/前移。

  a、访问         时间复杂度:o[1]

        a[10]=>*(a+10)

  b、删除/添加    不现实

<2> 数组应用

  最大的应用,查找表:基本不会添加/删除成员,可以一次性访问某个成员,借助数组下标的优越性.

   具体应用:要得到0~127这些范围中某个数的二进制码中,从最低位开始,第一次出现1的bit位编号.例如:

   3____>>0000 0011 得到的值位bit0

  4____>>0000 0100   得到的值位bit2

  一个比较简单的方法:

   data&0x01 =1,已经找到这个bit位编号

   否则:data >>1,循环检测

   虽最多比较7次,但仍没有办法绝对的固定得到这个值的具体时间,可以构建一个表:

a[128]={-1,0,1,0,2,0,1,0,3....}
         0,1,2,3,4,5,6,7,8

  ret=a[n]

  能在确定的时间内得到期望的结果.

缺点:事先构建表,占用内存空间.

猜你喜欢

转载自blog.csdn.net/wtj318_/article/details/83593664