二维数组的行优先和列优先存储
例如int a[2][4];
若为行优先则,a[1][2]是 1*4+2+1=7 第7个元素
若为列优先则,a[1][2]是 2*2+1+1=6 第6个元素
矩阵的转置
void trsmat(int A[][maxsize],int B[][maxsize],int m,int n)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
B[i][j]=A[j][i];
}
}
}
矩阵相乘
void mutcat(int C[][maxsize],int A[][maxsize], int B[][maxsize], int m,int n,int k)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
C[i][j]=0;
for(int h=0;h<n;h++)
{
C[i][j]+=A[i][h]*B[h][j];
}
}
}
}
稀疏矩阵顺序存储
1、三元组表示法
typedef struct
{
int val;
int i,j;
}Trimat;
申请:int trimat[m][n];
三元组A[0][0]为矩阵非零元素个数 A[0][1]和A[0][2]分别是矩阵的行数和列数
2、伪地址表示法
A[i][j]伪地址为n*(i-1)+j 即伪地址表每一行只有2个存储单元 而非3个
稀疏矩阵链式存储
1邻接表表示法(相当于图的邻接矩阵和邻接表)
2十字链表表示法
广义表:表元素可以是原子或者广义表的一种线性表的扩展结构
广义表的长度:表中最上层元素的个数,例如下面的C广度为2
广义表的深度:表中括号最大层数,例如下面的D深度为3(展开)
表头和表尾:当广义表非空时,第一个元素为广义表的表头,其余元素组成的表是广义表的表尾
A=()
B=(d,e)
C=(b,(c,d))
D=(B,C)
E=(a,E)
广义表头尾链表存储结构
广义表扩展线性表存储结构