二维数组的行优先和列优先存储

例如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)

广义表头尾链表存储结构

 

 

广义表扩展线性表存储结构