数据结构5-数组答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
即 Am*n=((a11 a12 ...a1n),(a21 a22 ...a2n),...,(am1 am2 ...amn)) 或由n个列向量组成,记作: a11 a21 am1 a12 a22 am2 a1n a2n amn
Amxn=
3.三维数组是一个定长线性表( 1,2,...,p )。 其中: k=( 1,2,...,m )为定长二维数组,1≤k≤p 例 三维数组A[1..3,1..4,1..2], p=3, m=4, n=2
A3*4*2 =
a111 a121 a131 a141
a112 a122 a132 a142
a211 a221 a231 a241
a212 a222 a232 a242
a311 a321 a331 a341
a312 a322 a332 a342
第3页
第2页
第1页
5.1.2 数组的类型定义和变量说明: 例1 int a[10]; //10个整数的一维数组 char b[4][5]; //4行5列个字符的二维数组 float c[3][4][2]; //3*4*2个实数的三维数组
0 1 2 3 4 5 6
//生成一维数组a //输入元素
//输出元素的平方
例2 生成动态的10个整数的一维数组 int *pa; pa=(int *)malloc(10*sizeof(int)); pa →
0 1 2 3 4 5 6 7 8 9
//指针变量pa //动态数组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); //释放(销毁)数组空间 }
2.二维数组是一个定长线性表(1,2,...,m), 其中: i=(ai1,ai2,...,ain)为行向量,1≤i≤m 由m个行向量组成,记作: ( a11 a12 ... a1n ) Am*n=
( a21 a22 ... a2n )
............ ( am1 am2 ... amn )
5.2数组的顺序表示和实现 5.2.1顺序表示(顺序存储结构) 1.以行序为主序的顺序存储方式 左边的下标后变化,右边的下标先变化 2.以列序为主序的顺序存储方式 左边的下标先变化,右边的下标后变化 例1 二维数组a[1..3,1..2],b是首地址,s是元素所占的单元数
序号 内存 地址 a11 a12 a21 a22 a31 a32 1 a11 2 a12 3 a21 4 a22 5 a31 6 a32 b b+s 序号 内存 地址 1 a11 2 a21 b b+s
b+2*s
b+3*s b+4*s
逻辑结构
3 a31 4 a12
5 a22 6 a32
b+2*s
b+3*s b+4*s
b+5*s
b+5*s
以行序为主序
以列序为主序
例2 三维数组a[1..2,1..3,1..2]
序号 内存 地址 1 a111 a112 b b+s b+2*s b+3*s b+4*s 序号 内存 地址 1 a111 b 2 3 4 5 a211 b+s a121 b+2*s a221 b+3*s a131 b+4*s
第五章
数组和广义表
引言: 线性表:L=(a1,a2,...,an),ai是同类型的元素,1≤i≤n 数组: A=(a1,a2,...,an) 若ai是同类型的元素,A是一维数组,1≤i≤n 若ai是同类型的定长线性表,A是多维数组,1≤i≤n 广义表:Ls=(a1,a,...,an) ai可以是同类型的元素或不定长的线性表,1≤i≤n 5.1 数组及其操作 简单地说,向量和矩阵称为数组。 5.1.1 数组的递归定义 1.一维数组是一个定长线性表(a1,a2,...,an )。 其中:ai为元素,i为下标/序号,1≤i≤n (a1,a2,...,an )又称为向量。
m 4 n 5 int ara[m]; char arb[m][n];
C语言中定义静态数组时,元素数目必须是常量 错例1 int m=4,n=5; int a[m][n]; //m,n是变量 错例2 int p; scanf(”%d”,&p); int c[p]; //p是变量
5.1.3 数组的操作 1.生成一个数组: int a[7];//生成静态一维数组(存储结构) 2.销毁一个数组 3.赋值/修改 a a[1]=15;(a[1])++; 0 1 2 3 4 5 6 4.取元素的值: a[0]=a[1]*2; a 32 16 5.1.4 程序设计举例 例1 main() { int i,a[10]; for (i=0;i<10;i++) scanf(”%d”,&a[i]); for (i=0;i<10;i++) printf(”%d ”,a[i]*a[i]); }
例2 #define m 4 #define n 5 int a[m]; char b[m][n]; 例3 #define #define typedef typedef ara a; arb b;
//定义符号常量m //定义符号常量n //m个整数的一维数组 //m行n列个字符的二维数组 //定义符号常量m //定义符号常量n //一维数组类型ara //二维数组类型arb //ara类型的变量a //arb类型的变量b
Baidu Nhomakorabea
2
a111 a112 a121 a122 a131 a132 a211 a212 a221 a222 a231 a232 3 4 5 6 7 逻辑结构 8