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

第五章数组和广义表
第五章 数组和广义表

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 矩阵的压缩存储 矩阵一般可用二维数组实现,特殊矩阵采用压缩存储。 压缩存储:为多个值相同的元只分配一个存储空间, 对零元不分配空间。 特殊矩阵:值相同的元素或者零元素在矩阵中的分布 有一定规律 稀疏矩阵:非零元较零元少,且分布没有一定规律的 矩阵
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《数据结构与算法》第4章 串.ppt
- 《数据结构与算法》第3章 栈和队列.ppt
- 《数据结构与算法》第2章 线性表.ppt
- 《数据结构与算法》第1章 绪论.ppt
- 《数据结构与算法》程序设计中的思维方式.ppt
- 《数据库基础教程》(实验指导)PDF电子书.pdf
- 《C语言程序设计》课程教学资源(PPT教学课件,共七章).ppt
- 《Delphi步步精通》PPT完整课件 第9章 图像图形应用编程.ppt
- 《Delphi步步精通》PPT完整课件 第8章 多媒体应用编程.ppt
- 《Delphi步步精通》PPT完整课件 第7章 常用组件.ppt
- 《Delphi步步精通》PPT完整课件 第6章 自定义类型.ppt
- 《Delphi步步精通》PPT完整课件 第5章 过程与函数.ppt
- 《Delphi步步精通》PPT完整课件 第4章 数组.ppt
- 《Delphi步步精通》PPT完整课件 第3章 三种结构的程序设计.ppt
- 《Delphi步步精通》PPT完整课件 第2章 Object Pascal语言基础.ppt
- 《Delphi步步精通》PPT完整课件 第1章 Delphi概述.ppt
- 《Delphi步步精通》PPT完整课件 第12章 SQL数据库程序设计.ppt
- 《Delphi步步精通》PPT完整课件 第11章 数据库应用基础.ppt
- 《Delphi步步精通》PPT完整课件 第10章 DLL的应用.ppt
- 《程序设计教程》教学资源(学习资料)PlainText.rtf
- 《数据结构与算法》第6章 树和二叉树.ppt
- 《数据结构与算法》第7章 图.ppt
- 《数据结构与算法》第8章 查找.ppt
- 《数据结构与算法》第9章 内部排序.ppt
- 《数据结构与算法》数据结构补充.doc
- 清华大学:《面向对象的理论与C++实践》PDF电子书(共十四章)(王燕).pdf
- 《C语言精彩编程百例》PDF电子书(共四篇).pdf
- 《计算机原理》课程教学资源:机械工业出版社《编码的奥秘》参考书籍(PDF电子书)第1章 电筒密谈.pdf
- 《计算机原理》课程教学资源:机械工业出版社《编码的奥秘》参考书籍(PDF电子书)第2章 编码与组合.pdf
- 《计算机原理》课程教学资源:机械工业出版社《编码的奥秘》参考书籍(PDF电子书)第3章 布莱叶盲文与二元编码.pdf
- 《计算机原理》课程教学资源:机械工业出版社《编码的奥秘》参考书籍(PDF电子书)第4章 手电筒剖析.pdf
- 《计算机原理》课程教学资源:机械工业出版社《编码的奥秘》参考书籍(PDF电子书)第5章 绕过拐弯的通信.pdf
- 《计算机原理》课程教学资源:机械工业出版社《编码的奥秘》参考书籍(PDF电子书)第6章 发报机与断电器.pdf
- 《计算机原理》课程教学资源:机械工业出版社《编码的奥秘》参考书籍(PDF电子书)第7章 十进制记数法.pdf
- 《计算机原理》课程教学资源:机械工业出版社《编码的奥秘》参考书籍(PDF电子书)第8章 其他进位制记数法.pdf
- 《计算机原理》课程教学资源:机械工业出版社《编码的奥秘》参考书籍(PDF电子书)第9章 二进制数.pdf
- 《计算机原理》课程教学资源:机械工业出版社《编码的奥秘》参考书籍(PDF电子书)第10章 逻辑与开关.pdf
- 《计算机原理》课程教学资源:机械工业出版社《编码的奥秘》参考书籍(PDF电子书)第11章 逻辑门电路.pdf
- 《计算机原理》课程教学资源:机械工业出版社《编码的奥秘》参考书籍(PDF电子书)第12章 二进制加法机.pdf
- 《计算机原理》课程教学资源:机械工业出版社《编码的奥秘》参考书籍(PDF电子书)第13章 如何实现减法.pdf