数组是由相同类型的元素(element)的集合所组成的数据结构,分配一块连续的内存来存储。利用元素的索引(index)可以计算出该元素对应的存储地址。(维基百科)

1. 存储结构

  数组是线性表数据结构,定义数组时,系统会分配一份连续的内存空间来存储一组相同的类型的数据,如int num[n];

2. 多维数组

  数组定义为一维数组、二维数组、三维数组…n维数组,其格式可以写成int num[n][m];

3. 查找、插入、删除时间复杂度

  3.1 需要查找数组第K个数时,数组会根据下标来访问,查找的时间复杂度为O(1)

  3.2 需要在数组的第K个数插入一个数Y,在有序数组的情况下,插入的时间复杂度为O(n)

void ArrayAdd(int* pNum, int nCount, int nAddIndex, int nAddNum) {
    int nEnd = nAddIndex-1;
    for(int nIndex=nCount-1; nIndex>=nEnd; nIndex—) {
        pNum[nIndex+1] = pNum[nIndex];
    }
    pNum[nEnd] = nAddNum;
}

  3.3 需要删除数组的第K个数,时间复杂度为O(n)

void ArrayDelete(int* pNum, int nCount, int nDeleteIndex) {
    int nStart = nDeleteIndex - 1;
    int nEnd = nCount - 1;
    for(int nIndex=nStart; nIndex<nEnd; nIndex++) {
        pNum[nIndex] = pNum[nIndex+1];
    }
}

4. 数组越界问题

  假如数组定义是int num[n],可以对0到(n-1)的数据进行操作,但是如果对n往后的数据进行操作的话就会出现数组越界,操作的不是num的数据而是其他的数据。

可关注公众号了解更多的面试技巧

02-11 06:45