资源描述:
《数据结构5-数组.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、2006-9华中科技大学计算机学院(5)数据结构第五章数组和广义表引言:线性表: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≤n5.1数组及其操作简单地说,向量和矩阵称为数组。5.1.1数组的递归定义1.一维数组是一个定长线性表(a1,a2,...,an)。其中:ai为元素,i为下标/序号,1≤i≤n(a1,a2,...,an
2、)又称为向量。2.二维数组是一个定长线性表(1,2,...,m),其中:i=(ai1,ai2,...,ain)为行向量,1≤i≤m由m个行向量组成,记作:(a11a12...a1n)(a21a22...a2n)............(am1am2...amn)Am*n=即Am*n=((a11a12...a1n),(a21a22...a2n),...,(am1am2...amn))或由n个列向量组成,记作:))a11a12a1na21a22a2nam1am2amn))))Amxn=3.三维数组是一个定长线性表(1,2,...,p)。其中:k=(1
3、,2,...,m)为定长二维数组,1≤k≤p例三维数组A[1..3,1..4,1..2],p=3,m=4,n=2a111a112a121a122a131a132a141a142a211a212a221a222a231a232a241a242a311a312a321a322a331a332a341a342第1页第2页第3页5.1.2数组的类型定义和变量说明:例1inta[10];//10个整数的一维数组charb[4][5];//4行5列个字符的二维数组floatc[3][4][2];//3*4*2个实数的三维数组A3*4*2=例2#definem4//定义符号
4、常量m#definen5//定义符号常量ninta[m];//m个整数的一维数组charb[m][n];//m行n列个字符的二维数组例3#definem4//定义符号常量m#definen5//定义符号常量ntypedefintara[m];//一维数组类型aratypedefchararb[m][n];//二维数组类型arbaraa;//ara类型的变量aarbb;//arb类型的变量bC语言中定义静态数组时,元素数目必须是常量错例1intm=4,n=5;inta[m][n];//m,n是变量错例2intp;scanf(”%d”,&p);intc[p];//
5、p是变量5.1.3数组的操作1.生成一个数组:inta[7];//生成静态一维数组(存储结构)2.销毁一个数组3.赋值/修改a[1]=15;(a[1])++;4.取元素的值:a[0]=a[1]*2;5.1.4程序设计举例例1main(){inti,a[10];//生成一维数组afor(i=0;i<10;i++)scanf(”%d”,&a[i]);//输入元素for(i=0;i<10;i++)printf(”%d”,a[i]*a[i]);//输出元素的平方}a01234563216a0123456例2生成动态的10个整数的一维数组int*pa;//指针变量papa=
6、(int*)malloc(10*sizeof(int));//动态数组pa*main(){inti,n,*pa;scanf(”%d”,&n);//动态输入npa=(int*)malloc(n*sizeof(int));//生成动态数组*pafor(i=0;i7、rintf("%d,",pa[i]);//输出数组元素free(pa);//释放(销毁)数组空间}pa→01234567895.2数组的顺序表示和实现5.2.1顺序表示(顺序存储结构)1.以行序为主序的顺序存储方式左边的下标后变化,右边的下标先变化2.以列序为主序的顺序存储方式左边的下标先变化,右边的下标后变化例1二维数组a[1..3,1..2],b是首地址,s是元素所占的单元数a11a12a21a22a31a32a11a12a21a22a31a32a11a21a31a12a22a32序号内存地址123456123456序号内存地址bb+sb+2*sb+3*sb+
8、4*sb+