- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章 数组和广义表 第五章 数组和广义表 5.1 数组的定义 5.2 数组的顺序表示和实现 5.4 广义表的定义 5.5 广义表的存储结构 第五章 数组和广义表 5.1 数组的定义 ADT Array { 数据对象:ji = 0, … , bi-1, i=1,2,……n, D={aj1j2…jn | n0} n表示数组的维数,bi是第i维的长度,ji是第i维的下标 数据关系:R={R1,R2,…,Rn} Ri={aj1…ji…jn, aj1…ji+1…jn } 基本操作: InitArray(A, n, bound1,…,boundn) DestroyArray(A) Value(A, e, index1,…,indexn) Assign(A, e, index1,…,indexn) 5.1 数组的定义 n维数组共有b1*b2*…*bn个元素 n维数组中每个元素都受n个关系的约束 2维数组共有m*n个元素 2维数组中的每个元素都受2个关系的约束 a00, a01, a02, a03, a04 a10, a11, a12, a13, a14 a20, a21, a22, a23, a24 5.1 数组的定义 二维数组可以转化成线性表吗? 方案1:按照行列顺序展开 a00, a01, …,a04, a10, a11, …a20… ,a24 方案2:看作是由一维数组(线性表)构成的一维数组 Am*n = ( (a00, a01, a02, a03, a04), (a10, a11, a12, a13, a14), (a20, a21, a22, a23, a24), ) 5.1 数组的顺序表示和实现 为何采用顺序结构? 数组一旦建立,其元素个数即固定不变 因此,永远不产生元素的插入与删除操作 只涉及到元素的赋值操作 如何将二维数组存放到一维的内存空间中? 按照行优先的顺序展开 按照列优先的顺序展开 5.1 数组的顺序表示和实现 如何确定元素的位置 LOC(i, j)=LOC(0,0)+(b2×i+j)L 5.1 数组的顺序表示和实现 若是行优先 LOC(i, j)=LOC(0,0)+(b2×i+j)L i=行标,b2=每行列数 5.1 数组的顺序表示和实现 若是列优先展开 LOC(i, j)=LOC(0,0)+(b2×i+j)L i=列标,b2=每列行数 5.1 数组的顺序表示和实现 typedef struct { ElemType *base; int *bounds; //二维数组维界基址 } Array_2; 5.1 数组的顺序表示和实现 Status InitArray(Array A, int m, int n) { A.bounds=(int *)malloc(2*sizeof(int)); A.bounds[0]=m; //行数 A.bounds[1]=n; //列数 elemtotal=m*n; //元素总数 A.base=(ElemType *)malloc(elemtotal*sizeof(ElemType)); } 5.1 数组的顺序表示和实现 Status locate(Array A, int i, int j, int off) { off=0; off=A.bounds[1]*i+j; return OK; } Status value(Array A, int i, int j, ElemType e) { off=0; locate(A, int i, int j, int off); e=*(A.base+off); return OK; } 5.4 广义表的定义 广义表是线性表的推广 广义表的元素也可以是线性表 ADT GList { 数据对象: D={ei | i=1,2,…,n; n=0; ei∈Ato
原创力文档


文档评论(0)