- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9-2讲 数组与广义表 主讲人:陈红丽 广义线性表 一、数组的基本概念 由一组名字相同、下标不同的变量构成。 可以将数组看成是由“一组下标”和“元素值”构成的二元组的集合。 注意:在此给出的数组定义中,各维下标的下限均约定为常量 0,这只是C语言的限定。在一般情况下,数组每一维的下标的取值范围均可设置为任意值的整数。 2_Array=(D, S, P) 定长线性表,每个元素也是定长线性表。 D = {ai,j| ai,j∈ElemSet, i=0,…,n1-1; j=0,…,n2-1} S = {ROW,COL} ROW={ai,j-1, ai,j| i=0,…,n1-1; j=1,…,n2-1} COL={ai-1,j, ai,j| i=1,…,n1-1; j=0,…,n2-1} ADT Array {数据对象:D={aj1,j2,...,ji ,...jN | ji=0,..., bi-1, i=1,2,..,N,称 N(0) 为数组的维数, bi为数组第 i 维的长度,ji为数组元素的第i维下标,aj1,...,jN ∈ElemSet }数据关系:R={R1, R2, ..., RN} Ri={aj1 ,...ji-1 ,...jN , aj1 ,...,ji,...,jN | 0≤jk≤bk-1, 1≤k≤N 且k≠i, 1≤ ji≤bi-1, aj1,...,ji-1,...,jN, aj1,...ji,...,jN ∈D, i=2,...,N } 基本操作: } ADT Array InitArray(A, n, bound1, ..., boundn)操作结果:若维数 n 和各维长度合法,则构造相应的数组 A DestroyArray(A)初始条件:数组 A 已经存在。操作结果:销毁数组 A。 Value(A, e, index1, ..., indexn)初始条件:A 是 n 维数组,e 为元素变量,随后是 n 个下标值操作结果:若各下标不超界,则e赋值为所指定的A的元素值,并返回OK。 Assign(A, e, index1, ..., indexn)初始条件:A 是 n 维数组,e 为元素变量,随后是 n 个下标值操作结果:若下标不超界,则将 e 的值赋给A中指定下标的元素。 由于数组类型不作插入和删除的操作,因此只需要通过“顺序映象”得到它的存储结构,即借助数据元素在存储器中的相对位置来表示数据元素之间的逻辑关系。 通常有两种映象方法:即以行(序)为主(序)的映象方法和以列(序)为主(序)的映象方法。 假设有6行8列的二维数组A[1..6][1..8],每个元素占用6个字节,存储器按字节编址。已知A的基地址为1000,计算: 数组A共占用多少字节; 数组A的最后一个元素的地址; 按行存储时元素A36的地址; 按列存储时元素A36的地址。 设N阶对称矩阵A存储为一维数组S[N(N+1)/2],以行主序的方式存储A的下三角,则元素A[5][3]的存储位置是S[ ] 广义表可以采用顺序存储结构吗? 由于广义表的非线性特征,且定义中对各个子表的长度没有任何限制,因此若试图采用顺序存储结构,必将引入许多繁杂的人为约束,使广义表的存储、应用复杂化。所以广义表一般采用链式存储结构。 如何采用链接存储结构存储广义表? E=(a,E)=(a,(a,E))= (a,(a,(a,…….))),E为递归表 1)A =( ) 2)B = ( e ) 3)C =( a ,( b , c , d ) ) 4)D=( A , B ,C ) 5)E=(a, E) 例1:求下列广义表的长度。 n=0,因为A是空表 n=1,表中元素e是原子 n=2,a 为原子,(b,c,d)为子表 n=3,3个元素都是子表 n=2,a 为原子,E为子表 D=(A,B,C)=(( ),(e),(a,(b,c,d))),共享表 例2: D = ( E, F ) = ((a, (b, c)),F ) Head( D ) = Tail( D ) = Head( E ) = Tail( E ) = Head( (( b, c)) ) = Tail( (( b, c)) ) = Head( ( b, c) ) = Tail( ( b, c) ) = Head( ( c ) ) = Tail( ( c ) ) = E ( F ) a ( (b,c) ) ( b,c ) ( ) b ( c ) c ( ) Head( ( ) )
文档评论(0)