中国高校课件下载中心 》 教学资源 》 大学文库

《数据结构与算法》第5章 数组和广义表

文档信息
资源类别:文库
文档格式:PPT
文档页数:30
文件大小:205.5KB
团购合买:点击进入团购
内容简介
5.1 数组的定义 5.2 数组的顺序表示和实现 5.3 矩阵的压缩存储
刷新页面文档预览

第五章数组和广义表

第五章 数组和广义表

5.1数组的定义 52数组的顺序表示和实现 53矩阵的压缩存储

5.1 数组的定义 5.2 数组的顺序表示和实现 5.3 矩阵的压缩存储

0一维数组具有线性表的结构,但操作简单,一般不 进行插入和删除操作,只定义给定下标读取元素和 修改元素的操作 0二维数组中,每个数据元素对应一对数组下标,在 行方向上和列方向上都存在一个线性关系,即存在 两个前驱(前件)和两个后继(后件)。也可看作 是以线性表为数据元素的线性表 n维数组中,每个数据元素对应n个下标,受n个关 系的制约,其中任一个关系都是线性关系。可看作 是数据元素为n-1维数组的一维数组。 0因此,多维数组和广义表是对线性表的扩展:线性 表中的数据元素本身又是一个多层次的线性表

一维数组具有线性表的结构,但操作简单,一般不 进行插入和删除操作,只定义给定下标读取元素和 修改元素的操作 二维数组中,每个数据元素对应一对数组下标,在 行方向上和列方向上都存在一个线性关系,即存在 两个前驱(前件)和两个后继(后件)。也可看作 是以线性表为数据元素的线性表。 n维数组中,每个数据元素对应n个下标,受n个关 系的制约,其中任一个关系都是线性关系。可看作 是数据元素为n-1维数组的一维数组。 因此,多维数组和广义表是对线性表的扩展:线性 表中的数据元素本身又是一个多层次的线性表

对于多维数组,有两种存储方式: 是以行为主序(或先行后列)的顺序存放,如 BASIC、 PASCAL、C等程序设计语言中用的是以行为 主的顺序分配,即一行分配完了接着分配下一行。 另一种是以列为主序(先列后行)的顺序存放, 如 FORTRAN语言中,用的是以列为主序的分配顺序 即一列一列地分配。 不论按何种方式存储,只要确定了数组的首地址以 及每个数组元素所占用的单元数,就可以将数组元素的 存储地址表示为其下标的线性函数。设有m×n二维数组 mn 以“以行为主序”的分配为例,按照元素的下标确 定其地址的计算方法如下

对于多维数组,有两种存储方式: 一是以行为主序(或先行后列)的顺序存放,如 BASIC、PASCAL、C等程序设计语言中用的是以行为 主的顺序分配,即一行分配完了接着分配下一行。 另一种是以列为主序(先列后行)的顺序存放, 如FORTRAN语言中,用的是以列为主序的分配顺序, 即一列一列地分配。 不论按何种方式存储,只要确定了数组的首地址以 及每个数组元素所占用的单元数,就可以将数组元素的 存储地址表示为其下标的线性函数。设有m×n二维数组 Amn,以“以行为主序”的分配为例,按照元素的下标确 定其地址的计算方法如下

设数组的基址为LOC(a1),每个数组元素占据L个地 址单元,计算a:的物理地址的函数为: LOC(ai)=LOC(a1)+((-1)*n+j-1)*L 同理,对于三维数组A-n,即m×n×p数组,对于数 组元素a1其物理地址为: LOC(aik=loc(a1+((i-1)*n*p+g-1)*p+k-1))L 注意: 在C语言中,数组中每一维的下界定义为0,则 LOC(aii=LOC(aoo)+(i*n+j)*L

设数组的基址为LOC(a11),每个数组元素占据L个地 址单元,计算aij的物理地址的函数为: LOC(aij) = LOC(a11) + ( (i-1)*n + j-1 ) * L 同理,对于三维数组Amnp,即m×n×p数组,对于数 组元素aijk其物理地址为: LOC(aijk)=LOC(a111)+( ( i-1) *n*p+ (j-1)*p +k-1) )*L 注意: 在C语言中,数组中每一维的下界定 义为0,则: LOC(aij) = LOC(a00) + ( i*n + j ) * L

51数组的定义 ADT Array 数据对象D 具有相同类型的数据元素构成的有序集合。 数据关系R 对于n维数组,其每一个元素均位于n 个向量中,每个元素最多具有n个前驱结点 和n个后继结点

5.1 数组的定义 ADT Array{ 数据对象D: 具有相同类型的数据元素构成的有序集合。 数据关系R: 对于n维数组,其每一个元素均位于n 个向量中,每个元素最多具有n个前驱结点 和n个后继结点

基本操作: InitArray (&A,n, index1,-, index) 新建一个n维数组A,其每维的大小由 index1, index2, index确定。 DestroyArray (&A) 销毁数组A,收回其占用的空间。 Value(A, &x, index1, a,index) 取出A[ indexlltindex2] index数组元素的值存入变量x中。 Assign(&A, e, index1,a,index) 将表达式e的值赋给数组元素 A[index1index2…… index] JADT Array

基本操作: InitArray(&A,n,index1,…, indexn) 新建一个n维数组A,其每维的大小由index1,index2,……,indexn确定。 DestroyArray(&A) 销毁数组A,收回其占用的空间。 Value(A,&x,index1,…,indexn) 取出A[index1][index2]……[indexn]数组元素的值存入变量x中。 Assign(&A,e,index1,…,indexn) 将表达式e的值赋给数组元素A[index1][index2]……[indexn] }ADT Array

52数组的顺序表示 0多维数组用一维的存储单元存放需约定次序。 PASCALI和c语言是以行序为主序, FORTRAN以 列序为主序。 0给定维数和各维长度,数组的存储空间确定。 0二维数组中任一元素a的存储地址 aLoc()=Loc(0,0)+(b2+1+j)L n维数组:教材p93 Loc(j1j2,…jn)=Loc(0,0,…,0)+∑cj 口其中cnL,c1=bc1n

5.2 数组的顺序表示 多维数组用一维的存储单元存放需约定次序。 PASCAL和C语言是以行序为主序,FORTRAN以 列序为主序。 给定维数和各维长度,数组的存储空间确定。 二维数组中任一元素aij的存储地址: Loc(i,j)=Loc(0,0)+(b2*i+j)*L n维数组:教材p93 Loc(j1,j2,…,jn)=Loc(0,0,…,0)+ ∑ci j i 其中 cn=L, ci-1=bi *ci , 1<i≤n

类型定义 Include # define MAX ARRAY Din8∥数组维数最大值 typedef structI Elem Type * base;数组元素基址 int dim. ∥数组维数 int *bounds; J数组维界基址 int *constants ∥数组映象函数常量基址 ARray

类型定义 #include #define MAX_ARRAY_DIM 8 //数组维数最大值 typedef struct{ ElemType *base; //数组元素基址 int dim; //数组维数 int *bounds; //数组维界基址 int *constants; //数组映象函数常量基址 }Array;

53矩阵的压缩存储 0矩阵一般可用二维数组实现,特殊矩阵采用压缩存储。 0压缩存储:为多个值相同的元只分配一个存储空间, 对零元不分配空间。 0特殊矩阵:值相同的元素或者零元素在矩阵中的分布 有一定规律 0稀疏矩阵:非零元较零元少,且分布没有一定规律的 矩阵

5.3 矩阵的压缩存储 矩阵一般可用二维数组实现,特殊矩阵采用压缩存储。 压缩存储:为多个值相同的元只分配一个存储空间, 对零元不分配空间。 特殊矩阵:值相同的元素或者零元素在矩阵中的分布 有一定规律 稀疏矩阵:非零元较零元少,且分布没有一定规律的 矩阵

共30页,试读已结束,阅读完整版请下载
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档