牛客网笔记之数组(一)

时间:2022-07-05 09:46:12

最近开始在“牛客网”上做题,希望通过日积月累,每天记录一点小知识,每天前进一小步。

今天练习的题目关于数组

1. 数组存储:链式存储、顺序存储

线性表逻辑上是线性的,存储上可以是顺序的,可以是链式的
链式存储可以连续,可以不连续,存储时不管其连续还是不连续,都是用指针指向下一个结点

2.顺序存储的根据数组指针直接定位,在顺序表的任何位置上插入一个数据元素,平均需要移动n/2个数据元素,算法效率为O(n)

3.稀疏矩阵:

有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是(66)
解析:每个元素要用行号,列号,元素值来表示,由于二维稀疏矩阵的大小都是在256之内,所以行号和列号只需要char来存储。在用三元组表示稀疏矩阵,还要三个成员来记住,矩阵的行数列数,总的元素数,所以所需的字节数是10*(1+1+1)*2+3*2=66

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

A. a+sizeof(int) 
// 不正确, 在32位机器上相当于指针运算 a + 4
B. &a[0]+1 
// 正确,数组首元素地址加1,根据指针运算就是a[1]的地址
C. (int*)&a+1 
// 正确,数组地址被强制类型转换为int*,然后加1,这样和B表示的一个意思
D. (int*)((char*)&a+sizeof(int))
// 正确,数据地址先被转换为char*,然后加4,根据指针运算公式,向前移动4 * sizeof(char),之后被转换为int*,显然是a[1]的地址

5.基址:

假设以行序为主序存储二维数组A=array[100][100],设每个数据元素占2个存储单元,基地址为10,则A[5,5]的地址为(1020)。
解析:A[5][5]的地址为:5*100*2+5*2+10=1020,千万不要忘记基址是10,不是0