朱战立数据结构第05章课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《朱战立数据结构第05章课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 朱战立 数据结构 05 课件
- 资源描述:
-
1、第第5 5章章 数组数组主要知识点主要知识点数组的基本概念数组的基本概念动态数组动态数组特殊矩阵特殊矩阵稀疏矩阵稀疏矩阵5.1 5.1 数组的基本概念数组的基本概念1.数组的定义数组的定义数组数组是是n( (n1 1) )个相同数据类型的数据元素个相同数据类型的数据元素a0 0, ,a1 1, ,a2 2,.,.,an-1-1构成的占用一块地址连续的内存单元的有构成的占用一块地址连续的内存单元的有限序列。限序列。 数组中任意一个元素可以用该元素在数组中的位置来表示,数组中任意一个元素可以用该元素在数组中的位置来表示,数组元素的位置通常称作数组元素的位置通常称作数组的下标数组的下标。 相同之处是
2、相同之处是它们都是若干个相同数据类型的数据元素它们都是若干个相同数据类型的数据元素a a0 0,a,a1 1,a,a2 2,.,a,.,a0-10-1构成的有限序列。构成的有限序列。不同之处是不同之处是:(1 1)数组要求其元素占用一块地址连续的内存单元空间,而)数组要求其元素占用一块地址连续的内存单元空间,而线性表无此要求;线性表无此要求;(2 2)线性表的元素是逻辑意义上不可再分的元素,而数组中)线性表的元素是逻辑意义上不可再分的元素,而数组中的每个元素还可以是一个数组;的每个元素还可以是一个数组;(3 3)数组的操作主要是向某个下标的数组元素中存数据和取)数组的操作主要是向某个下标的数组
3、元素中存数据和取某个下标的数组元素,这和线性表的插入、删除操作不同。某个下标的数组元素,这和线性表的插入、删除操作不同。数组符合线性结构的定义。数组和数组符合线性结构的定义。数组和线性表相比线性表相比, 线性结构(包括线性表、堆栈、队列、串)的顺序存储结线性结构(包括线性表、堆栈、队列、串)的顺序存储结构实际就是使用数组来存储。可见,数组是其他数据结构实现构实际就是使用数组来存储。可见,数组是其他数据结构实现顺序存储结构的基础,是软件设计中最基础的数据结构。顺序存储结构的基础,是软件设计中最基础的数据结构。 2.数组的实现机制数组的实现机制()、一维数组(一维数组(n个元素)中任一元素个元素)
4、中任一元素ai Loc(ai)=LOC(a)+i*k (0i n)( () )、一个一个m行行n列的二维数组列的二维数组LOC(aij)=LOC(a00)+(i*n+j)*k (0im,0jn)注:注:C C语言中数组元素采用语言中数组元素采用行主序行主序的存放方法,即的存放方法,即行优先行优先顺序。顺序。a的内存单元地址的内存单元地址每个元素所需的字节个数每个元素所需的字节个数每个元素所需的字节个数每个元素所需的字节个数a0 0的内存单元地址的内存单元地址 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=一个一个mn的
5、二维数组可以看成是的二维数组可以看成是m行的一维数行的一维数组,或者组,或者n列的一维数组。列的一维数组。3.数组抽象数据类型数组抽象数据类型数据集合数据集合:数组的数据集合可以表示数组的数据集合可以表示为为a0, a1, a2, ., an-1,每个数据元素的每个数据元素的数据类型为数据类型为抽象数据元素类型抽象数据元素类型DataType。操作集合操作集合:( (1)1)求数组元素个数求数组元素个数ArrayLength(D) ( (2 2) )取数组元素取数组元素Get(D, i)( (3)3)存数组元素存数组元素Storage(D, i, x) 例如,例如, int a10; a3 =
6、 a4; /赋值号右边的赋值号右边的a4是取操作,是取操作,取值取值 /赋值号左边的赋值号左边的a3是存操作,是存操作,取地址取地址5.2 5.2 动态数组动态数组 数组有数组有静态存储结构静态存储结构的数组和的数组和动态存储结构动态存储结构的数组两种,它的数组两种,它们的区别在于:们的区别在于:静态数组在定义时就必须给出数组个数;静态数组在定义时就必须给出数组个数;动态数组是在具体申请存储单元空间时才给出数组元素的个数。动态数组是在具体申请存储单元空间时才给出数组元素的个数。 例例5-2 5-2 定义有定义有3 3行、行、4 4列整数类型的二维数组列整数类型的二维数组a a,先逐行分别先逐行
7、分别给数组元素赋数据给数组元素赋数据1 1,2 2,.,1212,然后显示数组中的数值。,然后显示数组中的数值。要求分别把申请二维动态数组的过程和释放二维动态数组要求分别把申请二维动态数组的过程和释放二维动态数组的过程编写成函数。的过程编写成函数。int *Make2DArray(int row, int col) int *a, i; a = (int *)malloc(row * sizeof(int *); for (i = 0; i row; i+) ai = (int *)malloc(col * sizeof(int); return a;void Diliver2DArray(i
8、nt *a, int row) int i; for(i = 0; i row; i+) free(ai); free(a);#include #include #include #include “Array.h”void main(void) int i, j, c;int row = 3, col = 4, *a; a = Make2DArray(row, col); c = 1; for(i = 0; i row; i+) for(j = 0; j col; j+) aij = c; c+; for(i = 0; i row; i+) for(j = 0; j col; j+) pri
9、ntf(%5d, aij); printf(n); Diliver2DArray(a, row);程序运行输出结果如下:程序运行输出结果如下:1 2 3 41 2 3 45 6 7 85 6 7 89 10 11 129 10 11 12123456789101112a00a03a20a23a1a1a3a注意,二维动态数组的全部存储空间不是一次申请的,所以注意,二维动态数组的全部存储空间不是一次申请的,所以二维动态数组的每一维数组在物理上是连续的,而全部二维二维动态数组的每一维数组在物理上是连续的,而全部二维动态数组在物理上不一定是连续的。动态数组在物理上不一定是连续的。5.3 5.3 特殊矩
10、阵特殊矩阵 特殊矩阵特殊矩阵: :指有许多值相同的元素或有许多零元素、且值指有许多值相同的元素或有许多零元素、且值相同的元素或零元素的分布有一定规律的矩阵。相同的元素或零元素的分布有一定规律的矩阵。1.几种特殊矩阵的压缩存储几种特殊矩阵的压缩存储:(1)(1)n阶对称矩阵阶对称矩阵 在一个在一个n阶方阵阶方阵A A中,若元素满足下述性质:中,若元素满足下述性质: aij= =aji (11i, ,jn) 则称则称A为为n阶对称矩阵阶对称矩阵。如图。如图5.1是一个是一个5阶对称矩阵。阶对称矩阵。 1 5 1 3 7 a11 5 0 8 0 0 a21 a22 1 8 9 2 6 a31 a32
11、 a33 3 0 2 5 1 . 7 0 6 1 3 an1 an2 an3 ann n阶对称矩阵中的元素关于主对角线对称,故只要存储矩阵中阶对称矩阵中的元素关于主对角线对称,故只要存储矩阵中上三角或下三角中的元素,让每两个对称的元素共享一个存储上三角或下三角中的元素,让每两个对称的元素共享一个存储空间,这样,能节约近一半的存储空间。空间,这样,能节约近一半的存储空间。 在这个下三角矩阵中,第在这个下三角矩阵中,第i行恰有行恰有i个元素,元素总数为个元素,元素总数为n(n+1)/2,这样就可将这样就可将n2个数据元素压缩存储在个数据元素压缩存储在n(n+1)/2个存个存储单元中。储单元中。 假
展开阅读全文