目录
1、数组的定义
1、数组的定义
数组:按一定格式排列起来的具有相同类型的数据元素的集合。
一维数组:若线性表中的数据元素为非结构的简单元素,则称为一维数组。
一维数组的逻辑结构:线性结构。定长的线性表。
声明格式:数据类型变量名称[长度];例:int num[5]={0,1,2,3,4};
二维数组:若一维数组中的数据元素又是一维数组结构,则称为二维数组。
二维数组的逻辑结构:
1)非线性结构:每一个数据元素既在一个行表中,又在一个列表中。
2)线性结构【定长的线性表】:该线性表的每个数据元素也是一个定长的线性表。
2、数组的声明
声明格式:数据类型 变量名称 [行数] [列数];
例:int num[5] [8];
在C语言中,一个二维数组类型也可以定义为一维数组类型(其分量类型为一维数组类型),即:
typedef elemtype array2[m] [n];
等价于:
typedef elemtype array1[n];
typedef array1 array2[m];
3、N维数组
三维数组:若二维数组中的元素又是一个一维数组,则称作三维数组。
n维数组:若n-1维数组中的元素又是一个一维数组结构,则称作n维数组。
结论:线性表结构是数组结构的一个特例,而数组结构又是线性表结构的扩展。
数组特点:结构固定——定义后,维数和维界不再改变。
数组的基本操作:除了结构的初始化和销毁之外,只有取元素和修改元素值的操作
4、数组的顺序存储
4.1 一维数组的顺序存储
4.2 二维数组的顺序存储
存储单元是一维结构,而数组是个多维结构,则用一组连续存储单元存放数组的数据元素就有个次序约定问题。
以行序为主序 C, PASCAL,JAVA, Basic
以列序为主序 FORTRAN
5、特殊矩阵的压缩存储
矩阵:一个由m×n个元素排成的m行n列的表。
矩阵的常规存储:将矩阵描述为一个二维数组。
矩阵的常规存储的特点:可以对其元素进行随机存取;矩阵运算非常简单;存储的密度为1。
不适宜常规存储的矩阵:值相同的元素很多且呈某种规律分布;零元素多。
矩阵的压缩存储:为多个相同的非零元素只分配一个存储空间;对零元素不分配空间。
1)什么是压缩存储? 若多个数据元素的值都相同,则只分配一个元素值的存储空间,且零元素不占存储空间。
2)什么样的矩阵能够压缩? 一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。
3)什么叫稀疏矩阵? 矩阵中非零元素的个数较少(一般小于5%)
6、对称矩阵
1)特点:在nxn的矩阵a中,满足如下性质:aij=aji(1 <= i,j <= n)
2)存储方法:只存储下(或者上)三角(包括主对角线)的数据元素。共占用n(n+1)/2个元素空间。
7、三角矩阵
1)特点:对角线以下(或者以上)的数据元素(不包括对角线)全部为常数c。
2)存储方法:重复元素c共享一个元素存储空间,共占用n(n+1)/2+1个元素 空间:sa[1..n(n+1)/2+1]
8、对角矩阵
1)特点:
在nxn的方阵中,所有非零元素都集中在以主对角线为中心的带状区域中,区域外的值全为0,则称为对角矩阵。常见的有三对角矩阵、五对角矩阵、七对角矩阵等。
2)存储方法
9、稀疏矩阵
定义:非零元素的占比小于0.05时的矩阵
9.1 三元组顺序表法压缩存储原则
存各非零元的值、行列位置和矩阵的行列数。
三元组顺序表又称有序的双下标法。
优点:非零元在表中按行序有序存储,因此便于进行依行顺序处理的矩阵运算。
缺点:不能随机存取。若按行号存取某一行中的非零元,则需从头开始进行查找。
9.2 十字链表法压缩存储原则
优点:它能够灵活地插入因运算而产生的新的非零元素,删除因运算而产生的新的零元素,实现矩阵的各种运算
在十字链表中,矩阵的每一个非零元素用一个结点表示,该结点除了(row,col,value)以外,还要有两个域:
right:用于链接同一行中的下一个非零元素;
down:用以链接同一列中的下一个非零元素。
十字链表中结点的结构示意图:
十字链表法存储示意图