第五章 数组
第五章 数组
数组的定义与顺序存储
数组的定义:
数组A为n(n>0)个元素的有穷序列,记作A=(a1,a2,…an)
ai(1<=i=<n)或者全部为相同数据类型的原子项ei(即具体数值);或者全部为具有相同定义的数组Bi。
数组A=(a1,…,an)的维度Dim递归定义为:
C语言:
语法:ElemType arrayName[L1]…[Ln];
语义:第1维长度L1,元素L2…Ln的数组。
数组的顺序存储:
核心问题:数组元素多维结构到一堆内存空间的映射
数组A=(a1,…,an)(n>0)顺序存储方案的递归定义:
递归基础:ai为原子项ei
递归条件:ai为数组Bi
C语言:ElemType A [m] [n] (低下标优先存储)
例如:
C,Basic,Pascal等语言,数组元素按照低维下标大小升序排列存放。
A为矩阵时,亦称为按行优先存储。
二维数组A中任一元素a(i,j) 的存储位置:LOC(i,j) = LOC(0,0) + (b2×i+j)×L Loc(i,j)为基地址或基址
Fortran:ElemType A (m,n) (高下标优先存储)
Fortran语言,数组元素按照高维下标大小按次序存放。
A为矩阵时,亦称为按列优先存储。
数组的基本操作:
初始化: InitArray(A,bound1,...,boundn)
InitArray(A,low1,up1,...,lown,upn)
销毁: Destory(A)
赋值: SetValue(A,e,index1,...,indexn)
取值: GetValue(A,e,index1,...,indexn)
操作特点:
- 以数组元素的读取和写入为主;
- 一般不在数组中插入和删除数据元素;
- 支持使用下标(元素在各维数组中的位置序号)对数组元素进行随机访问。
小结:
数组特点:
- 数据元素亦为相同结构数组。
- 数据元素宏观为线性关系。
顺序存储方案:
- 可表达数组的递归结构,并体现数据元素之间的关系。
- 实现了数据元素多维关系到一维内存的映射。
- 通过下标可以随机访问数组元素。
普通矩阵的表示和实现:
矩阵的乘法
#include <stdio.h>
#include <stdlib.h>
int main()
{
float A[3][4] = {
{
2,-3,1,5}, {
-1,4,-4,-2}, {
2,-3,4,2} };
float B[4][2] = {
{
4,-