- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构-使用C语言 朱战立 第5章数组
行指针数组结构的三元组链表 * {{1,3,11},{1,5,17},{2,2,25},{4,1,19},{5,4,37},{6,7,50}} 三元组十字链表{{1,3,11},{1,5,17},{2,2,25},{4,1,19},{5,4,37},{6,7,50}} * * 第5章 数组 * 5.1 数组 5.2 动态数组 5.3 特殊矩阵的压缩存储 5.4 稀疏矩阵的压缩存储 5.1 数组 * 一、数组的定义 数组:它是n(n1)个相同数据类型的数据元素a0,a1,a2,…an-1构成的占用一块地址连续的内存单元的有限序列。 数组的下标:数组元素的位置。 注意 (1)C语言的数组定义下标从0开始。 (2) 数组的处理相比其它复杂的结构要简单。 ① 数组中各元素具有统一的类型; ② 数组元素的下标一般具有固定的上界和下界,即数组一旦被定义,它的维数和维界(静态数组)就不再改变。 ③数组的基本操作比较简单,除了结构的初始化和销毁之外,只有存取元素和修改元素值的操作。 (3)一个二维数组可以看作每个数据元素是一个一维数组的一维数组。二维数组是两维的,内存单元是一维的,存在向内存存储时二维数组中数据元素的存储方法问题,C语言采用以行序为主序的方法存储。 * 问题:数组与线性表的区别与联系 * 相同之处: 它们都是若干个相同数据类型的数据元素a0,a1,a2,…,an-1构成的有限序列。 不同之处: (1)数组要求其元素占用一块地址连续的内存单元空间,而线性表无此要求; (2)线性表的元素是逻辑意义上不可再分的元素,而数组中的每个元素还可以是一个数组; (3)数组的操作主要是向某个下标的数组元素中存放数据和取某个下标的数组元素,这与线性表的插入和删除操作不同。 二、数组的实现机制 * 1、一维数组(n个元素)中任一元素ai的内存单元地址 LOC(ai)=LOC(a0)+i*k (0≤i n) 2、一个m行n列的二维数组 LOC(aij)=LOC(a00)+(i*n+j)*k (0≤im, 0≤jn) 注:C语言中数组元素采用行主序的存放方法,即行优先顺序。 a0的内存单元地址 每个元素所需的字节个数 每个元素所需的字节个数 a00的内存单元地址 一个m×n的二维数组可以看成是m行的一维数组,或者n列的一维数组。 a0,0 a0,1 … a0,n-1 a1,0 a1,1 … a1,n-1 … … … … am-1,0 am-1,1 … am-1,n-1 Amn= 注:只要知道以下三要素便可随时求出任一元素的地址(意义:数组中的任一元素可随机存取)①开始结点的存放地址(即基地址);②维数和每维的上、下界;③每个数组元素所占用的单元数 * 例1〖软考题〗:一个二维数组A,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。那么,这个数组的体积是 个字节。 答: Volume=m*n*L=(6-1+1)*(7- 0 +1)*6=48*6=288 例2 设数组a[0…60, 0…70]的基地址为2048,每个元素占2个存储单元,若以行序为主序顺序存储,则元素a[32,58]的存储地址为 。 答:根据行优先公式 LOC(aij)=LOC(a00)+(i*n+j)*k (0≤im,0≤jn) 得:LOC(a32,58)=2048+(32*70+58)*2=6644 288 6644 三、数组抽象数据类型 * 数据集合:{ a0,a1,a2,…an-1 } 每个数据类型为抽象数据元素类型 操作集合:(1)求数组元素个数 ArrayLength(D) 函数返回数组D的元素个数 (2)存数组元素 Storage(D,i,x) 把数据元素x存入下标为i的数组D中,其约束条件 为0=i=ArrayLength(D)-1 (3)取数组元素 Get(D,i,x) 取出下标为i的数组D中的元素赋给参数x,其约束 条件为0=i=ArrayLength(D)-1 5.2 动态数组 * 一、动态数组的设计方法 1、动态数组的概念 动态数组:它是在需要存储单元空间时才给出数组的具体个数。 C语言提供的支持函数有: malloc
文档评论(0)