20210426

恋词U10 | 田静语法C6-S1 | 数据结构-矩阵(二)

Table of Contents

恋词U10

田静语法C6-S1

断开长难句-标点

断开长难句-连接词

从句开始于连接词,结束于三种位置

断开长难句-分析主谓

在没有连接词和逗号的时候才会采用这种方法,这种方法又有两种分类,下面加粗部分即为从句

  1. 主谓主谓
  2. 主谓
_____  从句
加粗   主语
标黄   谓语

主谓主谓,后面为宾语从句。

主谓主谓,后面为宾语从句

主主谓谓,中间是定语从句

主主谓谓,中间是定语从句


数据结构-稀疏矩阵-矩阵(二)

image.png

稀疏矩阵的存储

稀疏矩阵的定义

在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵。

稀疏矩阵没有严格的规定一个矩阵到底有多少0或者0的个数在矩阵总的元素占多少百分比,这是一个凭感觉的概念。

那么如何存储稀疏矩阵呢?

顺序存储-三元组表示法

image.png
float trimat [maxSize + 1][3];
float val = trimat [k][0];
int i = (int) trimat[k][1]; //取矩阵的行
int j = (int) trimat[k][2]; //取矩阵的列

那那那那为什么不用结构体呢?

image.png
typedef struct
{
float val;
int i,j;
}Trimat;
Trimat trimat [maxSize + 1];
float val = trimat [k].val;
int i = trimat [k].i;
int j =trimat [k].j;

顺序存储-伪地址表示法

伪地址即元素在矩阵中按照行优先或者列优先储存相对位置。伪地址法每一行只有两个储存单元,一个用来存放矩阵元素值,另一个用来存放伪地址。这种方法需要2N个储存单元,N为非0元素的个数,对于一个m*n的稀疏矩阵A,元素A[i][j]的伪地址计算方法伪n*i+j

链式存储-邻接表表示法(节约空间)

image.png

将矩阵种每一行非零元素串成一个链表,链表结点中有两个分量,分别表示该结点对应的元素值和列下标。

因为链表所在的行已经保存了整条链表中所有元素的行标信息啦。

typedef struct Node{
int data; //储存数据
int row; //列下标
struct Node *next;
}Trimat[100];

链式存储-十字链表表示法

矩阵的每一行用一个带头结点的链表表示,每一列用一个带头结点的链表表示,这种储存结构中有5个分量:行分量,列分量、数据分量、以及指向两头结点的指针。

image.png
typedef struct node{
int row,col;
struct node *right,*down;
int data;
}Node;
typedef struct{
Node *rhead,*chead;
int m , n , k;
}CrossList;