学习目标:
矩阵和数组
学习内容:
矩阵的定义
矩阵的转置
矩阵的相加
矩阵的相乘
稀疏矩阵
3元组表示矩阵及打印
10字链表的结构定义和头结点的定义
学习时间:
2021.4.6 9:00到12:00
学习产出:
矩阵的定义:
#define m 4
#define n 5
int a[m][n];
矩阵的转置:
//矩阵的转置
void trsmat(int A[][maxsize], int B[][maxszie], int m, int n)
{
for (int i = 0; i < m; ++i)
for (int j = 0; j < n; ++j)
B[i][j] = A[i][j];
}
矩阵的相加:
//矩阵相加
void addmat(int C[][maxisze], int A[][maxsize], int B[][maxsize], int m, int n)
{
for (int i = 0; i < m; ++i)
for (int j = 0; j < n; ++j)
C[i][j] = A[i][j] + B[i][j];
}
矩阵的相乘:
//矩阵相乘
void addmat(int C[][maxisze], int A[][maxsize], int B[][maxsize], int m, int n)
{
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];
}
}
稀疏矩阵:
//稀疏矩阵
typedef struct
{
int val;
int i, j;
}Trimat;
3元组表示矩阵:
//建立3元组
void createtrimat(float A[][maxsize], int m, int n, float B[][3])
{
int k = 1;
for (int i = 0; i < m; ++i)
for (int j = 0; j < n; ++j)
if (A[i][j] = 0)
{
B[k][0] = A[i][j];
B[k][1] = i;
B[k][2] = j;
++k;
}
B[0][0] = k - 1;
B[0][1] = m;
B[0][2] = n;
}
通过3元组打印矩阵:
//通过3元组打印矩阵
void print(float B[][3])
{
int k = 1;
for (int j = 0; j < B[0][1]; ++j)
{
for (int i = 0; i < B[0][2]; ++i)
{
if (i == (int)B[k][1] && j == (int)B[k][2])
{
cout << B[k][0] << "0";
}cout << end1;
}
}
}
10字链表的结构定义和头结点的定义:
//10字链表结构定义
typedef struct
{
int row, col; //行号和列号
struct OLNode* right, * down; //指向右边结点和下方的结点的指针
float val;
}QLNode;
//头结点定义
typedef struct
{
OLNode* rhead, * chead; //指向两头结点数组的指针
int m..k.n; //矩阵行数,列数以及非零结点总数
}CrossList;