湖北工业大学:《数据结构》第5章 数组

第5章数组 51数组 52动态数组 53特殊矩阵的压缩存储 54稀疏矩阵的压缩存储
1 第5章 数组 5.1 数组 5.2 动态数组 5.3 特殊矩阵的压缩存储 5.4 稀疏矩阵的压缩存储

5.1数组 数组的定义 数组:它是n(n>1个相同数据类型的数据元素a,a1a2yan1 构成的占用一块地址连续的内存单元的有限序列 数组的下标:数组元素的位置。 注意: (1)C语言的数组定义下标从0开始 (2)数组的处理相比其它复杂的结构要简单。 ①数组中各元素具有统一的类型; ②数组元素的下标一般具有固定的上界和下界,即数组一旦被 定义,它的维数和维界就不再改变。 ③数组的基本操作比较简单,除了结构的初始化和销毁之外, 只有存取元素和修改元素值的操作。 (3)一个二维数组可以看作每个数据元素是一个一维数组的一维数 组。二维数组是两维的,内存单元是一维的,存在向内存存储时 二维数组中数据元素的存储方法问题,C语言采用以行序为主序的 方法存储
2 5.1 数组 一、数组的定义 数组:它是n(n>1)个相同数据类型的数据元素a0,a1,a2,…an-1 构成的占用一块地址连续的内存单元的有限序列。 数组的下标:数组元素的位置。 注意: (1)C语言的数组定义下标从0开始。 (2) 数组的处理相比其它复杂的结构要简单。 ① 数组中各元素具有统一的类型; ② 数组元素的下标一般具有固定的上界和下界,即数组一旦被 定义,它的维数和维界就不再改变。 ③数组的基本操作比较简单,除了结构的初始化和销毁之外, 只有存取元素和修改元素值的操作。 (3)一个二维数组可以看作每个数据元素是一个一维数组的一维数 组。二维数组是两维的,内存单元是一维的,存在向内存存储时 二维数组中数据元素的存储方法问题,C语言采用以行序为主序的 方法存储

问题:数组与线性表的区别与联系 相同之处: 它们都是若干个相同数据类型的数据元素ao,a1,a2,…,an-1 构成的有限序列 不同之处: (1)数组要求其元素占用一块地址连续的内存单元空间,而 线性表无此要求; (2)线性表的元素是逻辑意义上不可再分的元素,而数组中 的每个元素还可以是一个数组; (3)数组的操作主要是向某个下标的数组元素中存放数据和 取某个下标的数组元素,这与线性表的插入和删除操作不同
3 问题:数组与线性表的区别与联系 相同之处: 它们都是若干个相同数据类型的数据元素a0,a1,a2,…,an-1 构成的有限序列。 不同之处: (1)数组要求其元素占用一块地址连续的内存单元空间,而 线性表无此要求; (2)线性表的元素是逻辑意义上不可再分的元素,而数组中 的每个元素还可以是一个数组; (3)数组的操作主要是向某个下标的数组元素中存放数据和 取某个下标的数组元素,这与线性表的插入和删除操作不同

二、数组的实现机制 1、一维数组(n个元素)中任一元素a的内存单元地址 LOC(ai=LoC(ao)+i*k (0si<n) 每个元素所需的字节个数 0 的内存单元地址 2、一个m行n列的二维数组 LOC(ai=LOC(a00)+(i*n+j)*k(0<K<m 0<<n) a0的内存单元地址 每个元素所需的字节个数 注:C语言中数组元素采用行主序的存放方法,即行优先顺序。 a 0,0a0,1 0,n-1 a1,0a1,1 1,n-1 个mxn的二维数组可以 mn 看成是m行的一维数组,或 am-1,0am-1,1…am-1,n-1 者n列的一维数组
4 二、数组的实现机制 1、一维数组(n个元素)中任一元素ai的内存单元地址 LOC(ai)=LOC(a0 )+i*k (0≤i <n) 2、一个m行n列的二维数组 LOC(aij)=LOC(a00)+(i*n+j)*k (0≤i<m, 0≤j<n) 注:C语言中数组元素采用行主序的存放方法,即行优先顺序。 a0的内存单元地址 每个元素所需的字节个数 a 每个元素所需的字节个数 00的内存单元地址 一个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个字节存储,存储器按字节编址。那么,这个 数组的体积是288个字节。 答: Volume=m*n米=(6-1+1)*(7-0+1)米6=48*6=288 例2设数组a[0.60,0…70]的基地址为2048,每个元素占2个存储单元, 若以行序为主序顺序存储,则元素a[32,58】的存储地址 为 6644 答:根据行优先公式L0C(a1)L0C(a0).+(it+)*(0≤i<m,0≤jn) 得:L0C(a325)=2048+(32*70+58)*2=6644
5 注:只要知道以下三要素便可随时求出任一元素的地址(意 义:数组中的任一元素可随机存取) ①开始结点的存放地址(即基地址); ②维数和每维的上、下界; ③每个数组元素所占用的单元数 例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≤i<m,0≤j<n) 得:LOC(a32,58)=2048+(32*70+58)*2=6644 288 6644

数组抽象数据类型 数据集合:{a,a,;a2yan1}每个数据类型为抽象数据元素类型 操作集合:(1)求数组元素个数 ArrayLength(D) (2)存数组元素 Storage(D,,x) (3)取数组元素Get(Di1x)
6 三、数组抽象数据类型 数据集合:{a0,a1,a2,…an-1 } 每个数据类型为抽象数据元素类型 操作集合:(1)求数组元素个数 ArrayLength(D) (2)存数组元素 Storage(D,i,x) (3)取数组元素 Get(D,i,x)

5.2动态数组 动态数组的设计方法 1、动态数组的概念 动态数组:它是在需要存储单元空间时才给出数组的具体个 数 C语言提供的支持函数有 malloc()、 calloc(、 freed 例:编写一个定义和使用二维3行4列动态数组的一个完整程序
7 5.2 动态数组 一、动态数组的设计方法 1、动态数组的概念 动态数组:它是在需要存储单元空间时才给出数组的具体个 数。 C语言提供的支持函数有: malloc( )、calloc( )、free( ) 例:编写一个定义和使用二维3行4列动态数组的一个完整程序

#inc lude #inc lude #include vold main(vo1 d t int 1, j, row=3, co1=4, **a a=(int*米)ma110c(r0W米 sizeof(in米); for(i=0;i<row; i++) ali]=(int *)malloc(col*sizeof (int)) for(i=0;i<row i++) for(j=0; j<col; j++) a printf( %d ali]lil); printf(“\n”);}
8 #include #include #include void main(void) { int i,j,row=3,col=4,**a; a=(int **) malloc(row*sizeof(int *)); for (i=0;i<row;i++) a[i]=(int *)malloc(col*sizeof(int)); for(i=0;i<row;i++) { for(j=0;j<col;j++) { a[i][j]=i+j; printf("%d ",a[i][j]); } printf(“\n”);} }

例:编写一个使用两维动态数组的函数。 int * Make2DArray (int row, int co1) int akka. 1 a=(int **)malloc (rowksizeof (int *) for (i=0 i<row; i++) ali]=(int *)malloc(col*sizeof (int)) return a
9 例:编写一个使用两维动态数组的函数。 int **Make2DArray(int row,int col) { int **a,i; a=(int **) malloc(row*sizeof(int *)); for (i=0;i<row;i++) a[i]=(int *) malloc(col*sizeof(int)); return a; }

#include #include # include/*函数已经定义,同前米/ void main(void) int i,j, c, row=3, col=4, **a; a=Make2DArray(row, col); for(i=0; i<row; i++) i for(j=0; j<co; j ++ anll=itj; printi(%d”,a[jljD);} printf(“Ⅶn”);
10 #include #include #include /*函数已经定义,同前*/ void main(void) { int i,j,c,row=3,col=4,**a; a=Make2DArray(row, col); for(i=0;i<row;i++) { for(j=0;j<col;j++) { a[i][j]=i+j; printf(“%d”,a[i][j]);} printf(“\n”); } }
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 湖北工业大学:《数据结构》第4章 串(String)(2/2).ppt
- 湖北工业大学:《数据结构》第4章 串(String)(1/2).ppt
- 湖北工业大学:《数据结构》第3章 堆栈和队列(3/3).ppt
- 湖北工业大学:《数据结构》第3章 堆栈和队列(2/3).ppt
- 湖北工业大学:《数据结构》第3章 堆栈和队列(1/3).ppt
- 湖北工业大学:《数据结构》第2章 线性表(4/4).ppt
- 湖北工业大学:《数据结构》第2章 线性表(3/4).ppt
- 湖北工业大学:《数据结构》第2章 线性表(2/4).ppt
- 湖北工业大学:《数据结构》第2章 线性表(1/4).ppt
- 湖北工业大学:《数据结构》前言、第1章 绪论.ppt
- 湖北工业大学:《数据结构》第9章(9-2)哈希查找表.ppt
- 湖北工业大学:《数据结构》第10章(10-1)查找的基本概念.ppt
- 《ASP程序设计》课程配套PPT教学课件(共十一章).ppt
- 《数字平面艺术设计》课程教学资源(教材PPT课件,图片版)第2章 平面设计概述.ppt
- 北京大学:《组件技术》课程教学资源(讲义课件)第十三讲 软件设计模式(二).pdf
- 北京大学:《组件技术》课程教学资源(讲义课件)第十二讲 软件设计模式(一).pdf
- 北京大学:《组件技术》课程教学资源(讲义课件)第十一讲 COM+.pdf
- 北京大学:《组件技术》课程教学资源(讲义课件)第十讲 COM:moniker、UT、control.pdf
- 北京大学:《组件技术》课程教学资源(讲义课件)第九讲 COM:可连接对象&结构化存储.pdf
- 北京大学:《组件技术》课程教学资源(讲义课件)第八讲 COM开发.pdf
- 湖北工业大学:《数据结构》第6章 递归.ppt
- 湖北工业大学:《数据结构》第7章 树和二叉树(Tree & Binary Tree)(1/5).ppt
- 湖北工业大学:《数据结构》第7章 树和二叉树(Tree & Binary Tree)(2/5).ppt
- 湖北工业大学:《数据结构》第7章 树和二叉树(Tree & Binary Tree)(3/5).ppt
- 湖北工业大学:《数据结构》第7章 树和二叉树(Tree & Binary Tree)(4/5).ppt
- 湖北工业大学:《数据结构》第7章 树和二叉树(Tree & Binary Tree)(5/5).ppt
- 湖北工业大学:《数据结构》第8章 图(1/2).ppt
- 湖北工业大学:《数据结构》第8章 图(2/2).ppt
- 湖北工业大学:《数据结构》第9章 排序(1/2).ppt
- 湖北工业大学:《数据结构》第9章 排序(2/2).ppt
- 中国矿业大学:密码学_authentication protocol.ppt
- 中国矿业大学:密码学_Block ciphers-AES(Advanced Encryption Standard).ppt
- 中国矿业大学:密码学_Block ciphers-DES(DATA ENCRYPTION STANDARD).ppt
- 中国矿业大学:密码学_Block ciphers-L&D(Linear and Differential Cryptanalysis).ppt
- 中国矿业大学:密码学_CRYPTO12(Number Theory).ppt
- 中国矿业大学:密码学_Digital Signature.ppt
- 中国矿业大学:密码学_Hash Functions.ppt
- 中国矿业大学:密码学_LECTURE3.ppt
- 中国矿业大学:密码学_NTHEORY2(Group Theory and Number Theory for Cryptology).ppt
- 中国矿业大学:密码学_Outline.ppt