1,三角矩阵是对称矩阵的一种,对称矩阵的最大特点就是a[m][n] = a[n][m]
那既然是这样,我们在内存中,就没有必要把这个矩阵全部保存,只要保存一半就可以了,余下的一半就用a[m][n] = a[n][m],来表示,这样就节省下来一半的内存.那么这个三角矩阵在内存中是怎么存储的呢
我们看到这个是有规律的,第一行1个元素,第二行2个元素,第N行就用N个元素
那么我们就可以计算出,在内存中的位置是:i*(i-1)/2+j-1
2,对角矩阵(带状矩阵)
在一般的矩阵中,数据全部集中在该矩阵的对角线附近,别的地方的数据全部是零,那么,我们只需要把有数据的元素保存下来,别的就不管了,这样也节省下来不少内存.
那么怎么保存这个数据,又方便查找和更改呢,答案是用二维数组,每条对角线的数据就是一个数组,这样,这个二维数组只占了24个数据,本来整个矩阵有64个元素,至于怎么保存,大家应该看到规律了,正对角线的坐标x,y相等,以(0,0)开始,下一个元素的坐标为x+1,y+1.
正对角线上面的那条线坐标以(0,1)开始,下一个元素的坐标同样是横纵坐标都加1
正对角线下面的那条线坐标以(1,0)开始,下一个元素的坐标同样是横纵坐标都加1
3稀疏式矩阵
一个普通矩阵中,其中有数据的元素的占比低于5%,超过95%都是空或者零,我们对这样的矩阵叫过稀疏式矩阵
像这种矩阵,我们也只要把中间有值的元素给保存下来,别的就不用管了,但是这种要怎么保存,保存后又怎么提取出来呢
首行,代表是一个7行,7列,有6个有值的元素,别的元素都是零的表,第二行表示1行,1列位置的元素值为3
第三行表示1行,4列位置的元素值为8,依次这样存储,就可以表示出这个稀疏式矩阵了
但是这种存储方式,在读取数据,添加元素和删除元素等操作上不是很方便.于是链式存储结构
就体现出优势了,这里可以采取十字链表:
这个就是十字链表的模型,其中数据为有五个成员的结构体:1:横坐标 2:纵坐标 3:元素值 4:向下边元素的指针 5:指向右边元素的指针
然后还有两个头指针列表,分别对应每一行和每一列
这个十字链表看起来好像比较麻烦,但是建立起来后,使用起来比较方便,不管是添加删除元素,都轻松完成.