数组和广义表-信管.ppt
《数组和广义表-信管.ppt》由会员分享,可在线阅读,更多相关《数组和广义表-信管.ppt(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第五章第五章数数组和广义表组和广义表 数组可看成是一种特殊的数组可看成是一种特殊的线性表线性表,其特殊在于,表中的数,其特殊在于,表中的数据元素本身也是一种线性表。据元素本身也是一种线性表。数组数组(ArrayArray)是由)是由n(n1)n(n1)个个相同类型数据元素相同类型数据元素a0a0,alal,aiai,an-1an-1构成的构成的有限序列有限序列。n n是数组的是数组的长度长度。其中。其中数组中的数据元素数组中的数据元素aiai是一个数据结构,即是一个数据结构,即aiai可以是线性表可以是线性表中的一个元素,本身也可以是一个线性表中的一个元素,本身也可以是一个线性表,而线性子表中
2、,而线性子表中的每一个数据元素还可以再分解的每一个数据元素还可以再分解 。根据数组元素。根据数组元素aiai的的组织形式不同,数组可以分为一维数组、二维数组以及多组织形式不同,数组可以分为一维数组、二维数组以及多维(维(n n维)数组。维)数组。有时也把一维数组称有时也把一维数组称为向量为向量,二维数组称,二维数组称为矩阵为矩阵。在二。在二维或多维数组中,每个数组元素都受到维或多维数组中,每个数组元素都受到2 2个或个或n n个关系的约束。个关系的约束。当数组为当数组为n n维时,其对应线性表中的每个元素又是一个线性维时,其对应线性表中的每个元素又是一个线性表。在每个关系中,每个元素都有一个直
3、接后继。因此,就表。在每个关系中,每个元素都有一个直接后继。因此,就其单个关系而言,这其单个关系而言,这n n个关系中的每一个仍然是一种线性关个关系中的每一个仍然是一种线性关系。系。数数组组中中每每个个元元素素都都是是由由一一个个值值和和一一组组下下标标来来确确定定的的。同同线线性性表表一一样样,数数组组中中的的所所有有数数据据元元素素都都必必须须属属于于同同一一数数据据类类型型。元元素素下下标标的的个个数数被被称称为为数数组组的的维维数数。显显然然,当当维维数数为为1 1时,数组就退化为定长的线性表。时,数组就退化为定长的线性表。数数组组1 1一维数组一维数组 一一维维数数组组可可以以看看成
4、成是是一一个个线线性性表表或或一一个个向向量量,它它在在计计算算机机内内是存放在一块连续的存储单元中,适合于随机查找。是存放在一块连续的存储单元中,适合于随机查找。一维数组记为一维数组记为AnAn或或A=(aA=(a0 0,a al l,aai i,a an-1n-1)一一维维数数组组中中,一一旦旦a a0 0的的存存储储地地址址、一一个个数数据据元元素素所所占占存存储储单单元元数数k k确定,则确定,则a ai i的存储地址的存储地址LOC(aLOC(ai i)就可求出:就可求出:LOC(aLOC(ai i)=LOC(a)=LOC(a0 0)+i*k (0in)+i*k (0in)2 2二维
5、数组二维数组 二二维维数数组组,又又称称矩矩阵阵(matrix)(matrix)。二二维维数数组组中中的的每每一一个个元元素素又又是是一一个个定定长长的的线线性性表表(一一维维数数组组),都都要要受受到到两两个个关关系系即即行行关关系系和和列列关系的约束,也就是每个元素都同属于两个线性表。关系的约束,也就是每个元素都同属于两个线性表。例如,设例如,设A A是一个有是一个有m m行行n n列的二维数组,则列的二维数组,则A A可以表示为:可以表示为:数组数组 可可以以看看成成由由m m个个行行向向量量组组成成的的向向量量,也也可可以以看看由由n n个个列列向向量量组组成成的的向量。向量。数数组组
6、中中的的每每个个元元素素由由元元素素值值a aijij及及一一组组下下标标(i i,j j)来来确确定定。a aijij既属于第既属于第i i行的行向量,又属于第行的行向量,又属于第j j列的列向量。列的列向量。其中,其中,a ai i=(a=(ai,0i,0 a ai,1i,1 a ai,n-1i,n-1)(0)(0i in)n)可以认为可以认为A Am*nm*n=A=A,A A是这样的一维数组:是这样的一维数组:A=(a A=(a0 0,a al l,a ai i,a am-1m-1)a00a01am-1,0Amn=Amn=(a00,a01,a0,n-1),(a10,a11,a1,n-1)
7、,(am-1,0,am-1,1,am-1,n-1)(a)(b)显显然然,二二维维数数组组同同样样满满足足数数组组的的定定义义。一一个个二二维维数数组组可可以以看看作作是是每每个个数数据据元元素素都都是是相相同同类类型型的的一一维维数数组组。以以此此类类推推,任任何何多多维维数数组组都都可可以以看看作作一一个个线线性性表表,这这时时线线性性表表中中的的每每个个数数据据元元素素也也是一个线性表。多维数组是特殊的线性表,是线性表的推广。是一个线性表。多维数组是特殊的线性表,是线性表的推广。数组的性质数组的性质数组中的数据元素数目固定。数组中的数据元素数目固定。数组中的数据元素必须具有数组中的数据元素
8、必须具有相同的数据类型。相同的数据类型。数组中的每个数据元素都有一组唯一的下标值。数组中的每个数据元素都有一组唯一的下标值。数数组组是是一一种种随随机机存存储储结结构构。可可随随机机存存取取数数组组中中的的任任意意数据元素。数据元素。数数 组组 由由于于数数组组一一般般不不作作删删除除或或插插入入运运算算,所所以以一一旦旦数数组组被被定定义义后后,数数组组中中的的元元素素个个数数和和元元素素之之间间的的关关系系就就不不再再变动。通常采用变动。通常采用顺序存储结构顺序存储结构表示数组。表示数组。对于一维数组,数组的存储结构关系为对于一维数组,数组的存储结构关系为:LOC(aLOC(ai i)=L
9、OC(a)=LOC(a0 0)+i*k)+i*k (0in)(0in)对于二维数组,由于计算机的存储单元是一维线性结对于二维数组,由于计算机的存储单元是一维线性结构,如何用线性的存储结构存放二维数组元素就有行构,如何用线性的存储结构存放二维数组元素就有行/列列次序问题。常用两种存储方法:次序问题。常用两种存储方法:以行序以行序(row major(row major order)order)为主序为主序的存储方式和的存储方式和以列序以列序(column major(column major order)order)为主序为主序的存储方式。的存储方式。数组的存储结构数组的存储结构|行优先顺序行优
10、先顺序将数组元素将数组元素按行按行排列,第排列,第i+1i+1个行向量紧接个行向量紧接在第在第i i个行向量后面。以二维数组为例,按行优先顺序存储个行向量后面。以二维数组为例,按行优先顺序存储的线性序列为:的线性序列为:a a1111,a,a1212,a,a1n1n,a,a2121,a,a2222,a,a2n2n,a,am1m1,a,am2m2,a amnmn 在在PASCALPASCAL、C C语言中,数组就是按行优先顺序存储的。语言中,数组就是按行优先顺序存储的。|列优先顺序列优先顺序将数组元素将数组元素按列按列向量排列,第向量排列,第j+1j+1个列向量个列向量紧接在第紧接在第j j个列
11、向量之后,个列向量之后,A A的的m*nm*n个元素按列优先顺序存储个元素按列优先顺序存储的线性序列为:的线性序列为:a a1111,a,a2121,a,am1m1,a,a1212,a,a2222,a,am2m2,a,an1n1,a,an2n2,a anmnm 在在FORTRANFORTRAN语言中,数组就是按列优先顺序存储的。语言中,数组就是按列优先顺序存储的。顺序存储结构顺序存储结构 二维数组的两种存储结构二维数组的两种存储结构 对对一一个个以以行行序序为为主主序序的的计计算算机机系系统统,当当二二维维数数组组第第一一个个数数据据元元素素a a0,00,0的的存存储储地地址址LOC(aLO
12、C(a0,00,0)以以及及每每个个数数据据元元素素所所占占用用的的存存储储单单元元k k确确定定后后,该该二二维维数数组组中中任任一一数数据据元元素素a ai,ji,j的的存存储储地址可由下式确定地址可由下式确定:LOC(aLOC(ai,ji,j)=LOC(a)=LOC(a0,00,0)+(i)+(in+jn+j)k)k其中其中n n为每行中的列数。为每行中的列数。以以“行序为主序行序为主序”的存储映象的存储映象按行序为主序存放按行序为主序存放01n-1m*n-1n am-1n-1 .am-11 am-10 .a1n-1 .a11 a10 a0n-1 .a01 a00a00a01.a0n-1
13、a10a11.a1n-1am-10am-11am-1n-1.Loc(i,j)=Loc(0,0)+n*i+j*L 【例【例1】对于给定的二维数组】对于给定的二维数组floata34,计算:,计算:(1)数组数组a中的数组元素数目;中的数组元素数目;(2)若若数数组组a的的起起始始地地址址为为1000,且且每每个个数数组组元元素素长长度度为为32位位(即即4个字节个字节),数组元素,数组元素a23的内存地址。的内存地址。【解解】(1)由由于于C语语言言中中数数组组的的行行、列列下下标标值值的的下下界界均均为为0,该该数数组组行行上上界界为为3-1=2,列列上上界界为为4-1=3,所所以以该该数数组
14、组的的元元素素数数目目共共有有3*4=12个。个。(2)由于由于C语言采用行序为主序的存储方式,有:语言采用行序为主序的存储方式,有:LOC(a2,3)=LOC(a0,0)+(i*n+j)*k=1000+(2*4+3)*4=1044顺序存储结构例顺序存储结构例 【例例5-25-2】有有m m名名学学生生,每每人人考考n n门门功功课课,试试写写出出求求任任一一学学生生总总分分数和任一课程总分数的数据结构和算法。数和任一课程总分数的数据结构和算法。【解解】把把学学生生的的考考试试成成绩绩存存放放在在m m行行n n列列的的二二维维数数组组中中,则则第第i(0im)i(0im)行行第第j(0jn)
15、j(0jn)列列中中存存放放了了第第i i个个学学生生的的第第j j门门课课程程考考试成绩。即数据结构为:试成绩。即数据结构为:#define M 10#define M 10 /假设假设 为为1010人人#define N 3#define N 3 /假设假设 为为3 3int scoreMN;int scoreMN;/学生成绩二维数组学生成绩二维数组顺序存储结构例顺序存储结构例 求第求第j j门课程总分数的算法为:门课程总分数的算法为:intcourse_sum(intscoreMN,intj)inti,sum=0;for(i=0;iM;i+)sum=sum+scoreij;return(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 广义
限制150内