牛客网笔记之数组(一)
2015-12-01 09:16
274 查看
最近开始在“牛客网”上做题,希望通过日积月累,每天记录一点小知识,每天前进一小步。
今天练习的题目关于数组。
链式存储可以连续,可以不连续,存储时不管其连续还是不连续,都是用指针指向下一个结点
解析:每个元素要用行号,列号,元素值来表示,由于二维稀疏矩阵的大小都是在256之内,所以行号和列号只需要char来存储。在用三元组表示稀疏矩阵,还要三个成员来记住,矩阵的行数列数,总的元素数,所以所需的字节数是10*(1+1+1)*2+3*2=66
4.关于
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]的地址
解析:A[5][5]的地址为:5*100*2+5*2+10=1020,千万不要忘记基址是10,不是0
今天练习的题目关于数组。
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
相关文章推荐
- MST性质证明
- java面向对象编程(类、对象)
- SAP2014年最新版本EHP7安装经验分享
- iOS笔记24
- 集合框架--List相关
- 键盘变搜索按钮
- Python Core Programing Chapter 0_4 Test
- oracle多表关联删除数据表记录方法
- java的数学函数总结
- android中volatile和synchronized的应用
- svn邮件通知
- 为什么全球最好的大学大半在美国?看看美国的孩子是怎么念书的
- Java中密码加密之PBE算法
- android recovery镜像解包和打包
- 【转】如何实现一个文件系统
- Server.MapPath()
- my97DatePicker选择年、季度、月、周、日
- ORACLE多表关联UPDATE 语句
- java字符串函数及理解
- java常用日期函数总结