数组
定义:数组是由类型相同的数据元素构成的有序集合,每个元素称为数组元素,每个元素受n个线性关系的约束,每一个元素在n个线性关系中的序号\(i_{1},i_{2}.....i_{n}\)称为该元素的下标可以通过下标访问该数据元素。
一维数组:若线性表中数据元素为非结构的简单元素,则称为一维数组。
数组一旦被定义,它的维数和维界就不再改变,除了结构的初始化和销毁之外数组只有存取元素和修改元素值的操作。
数组的顺序存储
对于二维数组而言,可有两种存储方式
- 以行序为主序的存储方式
- 以列序为主序的存储方式
假设每个数据元素占据L个存储单元,则二维数组\(A[0....m-1,0....n-1]\) (即从下标0开始,共有m行n列)
则任意个\(a_{ij}\)的存储位置可由下式确定
\(LOC(i,j)=LOC(0,0)+(n*i+j)*L\) (行序为主序存储结构的公式,列序同理)
\(LOC(i,j)\)是\(a_{ij}\)的存储位置;\(LOC(0,0)\)是\(a_{00}\)的存储位置即是二维数组的起始存储位置(称基地址或基址)
特殊矩阵的压缩存储
定义:假若值相同的元素或者零元素在矩阵的分布有一定规律,则称此类矩阵为特殊矩阵
特殊矩阵主要包括对称矩阵 三角矩阵和对角矩阵
对称矩阵
定义:若n阶矩阵A中的元满足满足下列性质\(a_{ij}=a_{ji}\)则称为n阶对称矩阵。
对于对称矩阵,可以为每一个对称矩阵分配一个存储空间 则可将\(n^2\)个元压缩存储到\(n(n+1)/2\)个元的空间中,可以行序为主序存储其下三角中的元
假设以一维数组\(sa[n*(n+1)/2]\)作为n阶对称矩阵A的存储结构,则\(sa[k]\)和矩阵元\(a_{ij}\)之间存在对应关系:
1.当\(i>=j\) 时 \(K=i*(i-1)/2+j-1\)
2.当\(i<j\) 时 \(K=j*(j-1)/2+i-1\)
计算思路
先计算出前n-1行有几个元(如图中是\((n-1)*(n-1+1)/2+j-1\)然后加上前\(j-1\)列的元(这是行序为主序的,列序为主序的同理)
[假装有图.jpg]
三角矩阵
定义:以主对角线划分,三角矩阵有上三角矩阵和下三角矩阵两种,上三角矩阵是指矩阵下三角(不包括对角线)中的元均为常数或零的n阶矩阵,下三角矩阵与之相反。
计算思路:同对称矩阵一样(就这样懂!!!)
对角矩阵
对角矩阵所有的非零元素都集中在以主对角线为中心的带状区域,即除了主对角线上和直接对角线上下若干对角线上的元以外,所有其他元皆为零。
包括:常见的对角矩阵有:三对角矩阵,五对角矩阵,七对角矩阵。
存储方法:
稀疏矩阵
定义:矩阵中其非零元较零元少,且分布没有一定的规律称之为稀疏矩阵
稀疏矩阵的顺序存储结构---三元组顺序表
三元组\((i,j,v)\)表示
i表示行数
j表示列数
v表示元素的值
【这里有图.jpg】
稀疏矩阵的链式存储结构---十字链表
就这样吧!!!!!!!