5.1.3数组的操作 1.生成一个数组:inta[7];//生成静态一维数组(存储结构) 2.销毁一个数组 3.赋值/修改 a[1]=15;(a[1])++; a 4.取元素的值 0123456 a[0]=a[1]*2 a32|16 3456 5.1.4程序设计举例 例 I main i int i, al10] //生成一维数组a for(i=0;i<10;i++) scanf(9%d,,, &aliD //输入元素 for(i=0;i<10;i++) printf(d”,a[i]*a[i]);//输出元素的平方
5.1.3 数组的操作 1.生成一个数组: int a[7];//生成静态一维数组(存储结构) 2.销毁一个数组 3.赋值/修改 a[1]=15;(a[1])++; 4.取元素的值: a[0]=a[1]*2; 5.1.4 程序设计举例 例1 main() { int i,a[10]; //生成一维数组a for (i=0;i<10;i++) scanf(”%d”,&a[i]); //输入元素 for (i=0;i<10;i++) printf(”%d ”,a[i]*a[i]); //输出元素的平方 } a 0 1 2 3 4 5 6 a 32 16 0 1 2 3 4 5 6
例2生成动态的10个整数的一维数组 int pa; //指针变量pa pa=(int *)malloc(10*sizeof(int)) /动态数组pa pa 0123456789 main t int i, n, *pa; scanf(2%d?, &n) //动态输入n pa=(int*)ma1loc(n米 sizeof(int));/生成动态数组*pa for (i=0; i<n; i++) 米(pa+i)=2*i; //指针法引用数组元素,赋值 for (i=0; i<n; i++) printf(%d,”,*(pa+i));//输出数组元素0,2,4,6, for (i=0; i<n:i++ scanf(<%d", &pali]) //下标法引用数组元素,输入 for (i=0; i<n; i++) printf( %d, palid) //输出数组元素 free(pa) /释放(销毁)数组空间
例2 生成动态的10个整数的一维数组 int *pa; //指针变量pa pa=(int *)malloc(10*sizeof(int)); //动态数组pa* main() { int i,n,*pa; scanf(”%d”,&n); //动态输入n pa=(int *)malloc(n*sizeof(int));//生成动态数组*pa for (i=0;i<n;i++) *(pa+i)=2*i; //指针法引用数组元素,赋值 for (i=0;i<n;i++) printf(“%d,”,*(pa+i)); //输出数组元素0,2,4,6,... for (i=0;i<n;i++) scanf(“%d”,&pa[i]); //下标法引用数组元素, 输入 for (i=0;i<n;i++) printf("%d,",pa[i]); //输出数组元素 free(pa); //释放(销毁)数组空间 } pa → 0 1 2 3 4 5 6 7 8 9
5.2数组的顺序表示和实现 5.2.1顺序表示(顺序存储结构) 以行序为主序的顺序存储方式 左边的下标后变化,右边的下标先变化 2.以列序为主序的顺序存储方式 左边的下标先变化,右边的下标后变化 例1二维数组a[1..3,1..2],b是首地址,s是元素所占的单元数 序号内存地址 序号内存地址 11al2 all all b a21a22 2|a12b+s 2a21 b+s a31a32 3a21b+2*s a31b+2*s 逻辑结构 4|a22b+3*s a12b+3*S a31b+4*s 5|a22b+4*s 6a32 b+5*s a32b+5*s 以行序为主序 以列序为主序
5.2数组的顺序表示和实现 5.2.1顺序表示(顺序存储结构) 1.以行序为主序的顺序存储方式 左边的下标后变化,右边的下标先变化 2.以列序为主序的顺序存储方式 左边的下标先变化,右边的下标后变化 例1 二维数组a[1..3,1..2],b是首地址,s是元素所占的单元数 a11 a12 a21 a22 a31 a32 a11 a12 a21 a22 a31 a32 a11 a21 a31 a12 a22 a32 序号 内存 地址 1 2 3 4 5 6 1 2 3 4 5 6 序号 内存 地址 b b+s b+2*s b+3*s b+4*s b+5*s b b+s b+2*s b+3*s b+4*s b+5*s 以行序为主序 以列序为主序 逻辑结构
例2三维数组a[1..2,1..3,1..2] 序号内存地址 序号内存地址 alll 1|a111b 2a112b+s 2a211b+s a211 a212 a121b+2*s 3a121b+2*s alll all2 a221 a222 a122b+3*s 4a221b+3*s a121a122 a231a232 a13la132 第2页 456 a131b+4*s 5a131b+4*s a132b+5*s 6a231b+5*s 第1页 7|a211b+6*S 7a112b+6*s 逻辑结构 8a212 8a212 a221 a122 10a222 10a222 a231 a132 12a232b+1712232b+12s 以行序为主序 以列序为主序
例2 三维数组a[1..2,1..3,1..2] a111 a112 a121 a122 a131 a132 a111 a112 a121 a122 a131 a132 a211 a212 a221 a222 a231 a232 序号 内存 地址 1 2 3 4 5 6 7 8 9 10 11 12 序号 内存 地址 b b+s b+2*s b+3*s b+4*s b+5*s b+6*s b+11*s b b+s b+2*s b+3*s b+4*s b+5*s b+6*s b+11*s 以行序为主序 以列序为主序 逻辑结构 a211 a212 a221 a222 a231 a232 第1页 第2页 1 2 3 4 5 6 7 8 9 10 11 12 a111 a211 a121 a221 a131 a231 a112 a212 a122 a222 a132 a232
5.2.2数组的映象函数 数组元素的存储地址 例1一维数组a[0.n-1] ao ala2 al a(n 下标012 n-1 地址bb+sb+2*s b+i*s b+(n-1)*s 设:b为首地址,s为每个元素所占的存储单元数 则:元素a[i的存储地址: Loc(i)=Loc(O)+i*s=b+i*s0≤i≤n-1 例2一维数组a[1.n] al.ai ..I an 下标12 3 n 地址bb+sb+2s b+(i-1)s b+(n-1)s
5.2.2数组的映象函数 数组元素的存储地址 例1 一维数组a[0..n-1] 设:b为首地址,s为每个元素所占的存储单元数 则:元素a[i]的存储地址: Loc(i)=Loc(0)+i*s=b+i*s 0≤i≤n-1 a0 a1 a2 ... ai ... a(n-1) 下标 0 1 2 i n-1 地址 b b+s b+2*s b+i*s b+(n-1)*s a1 a2 a3 ... ai ... an 下标 1 2 3 i n 地址 b b+s b+2s b+(i-1)s b+(n-1)s 例2 一维数组a[1..n]