20210426
恋词U10 | 田静语法C6-S1 | 数据结构-矩阵(二)
Table of Contents
恋词U10
- unreliability n.靠不住
- emigrate v.移居外国
- negotiate v.谈判;洽谈;协商
- peculiar adj.古怪的;异常的
- perceive v.察觉,意识到;看作,认为
- kin n.家族,亲属,血缘关系 adj.有亲属关系的
- narrative n.叙述;记叙文 adj.叙事的
- semiconductor n.半导体
- eat one's words 承认错误
- calorie n.卡路里
- hail v.下雹;来自;向...欢呼 n.冰雹
- illiberal adj.不容言论的;不开明的
- liberty n.自由
- compromise v.妥协;做出让步;损害 n.妥协,折中
- stick with 紧跟,不离开
- archive n.档案;档案室 v.把..存档
田静语法C6-S1
断开长难句-标点
断开长难句-连接词
从句开始于连接词,结束于三种位置
- 结束于标点
- 结束于下一个连接此前
- 结束于第二个谓语动词前
断开长难句-分析主谓
在没有连接词和逗号的时候才会采用这种方法,这种方法又有两种分类,下面加粗部分即为从句
- 主谓主谓
- 主主谓谓
_____ 从句
加粗 主语
标黄 谓语
- The lASB says it does not want to act without overall planning, ...
主谓主谓,后面为宾语从句。
- Allen's contribution was to take an assumption we all share...
主谓主谓,后面为宾语从句
- When the court deals with social policy decisions, the law it shapes is inescapably political...
主主谓谓,中间是定语从句
- The way consumers now approach the process of making purchase decisions means that marketing's impact stems from a broad range of factors beyond conventional paid media.
主主谓谓,中间是定语从句
数据结构-稀疏矩阵-矩阵(二)
稀疏矩阵的存储
- 顺序存储
- 三元组表示法
- 伪地址表示法
- 链式存储
- 邻接链表表示法
- 十字链表表示法
稀疏矩阵的定义
在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵。
稀疏矩阵没有严格的规定一个矩阵到底有多少0或者0的个数在矩阵总的元素占多少百分比,这是一个凭感觉的概念。
那么如何存储稀疏矩阵呢?
顺序存储-三元组表示法
float trimat [maxSize + 1][3];
float val = trimat [k][0];
int i = (int) trimat[k][1]; //取矩阵的行
int j = (int) trimat[k][2]; //取矩阵的列
- 三元组:三个数据单元组成的一个整体。
- why不是四元、五元? 对于矩阵中元素只需要三个值:元素的值,元素的位置(行标列标)
- 一般第一行不存储任何一个矩阵中的元素。那么上图5、4、4代表:5代表矩阵中非零元素的个数,4,4代表矩阵的尺寸(行数和列数),然后从下标1开始存储元素。
(int) trimat[k][1]
是因为定义矩阵类型的时候是float
,但是下标一定要是整型。
那那那那为什么不用结构体呢?
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
。
链式存储-邻接表表示法(节约空间)
将矩阵种每一行非零元素串成一个链表,链表结点中有两个分量,分别表示该结点对应的元素值和列下标。
- 为什么不用存行号?
因为链表所在的行已经保存了整条链表中所有元素的行标信息啦。
typedef struct Node{
int data; //储存数据
int row; //列下标
struct Node *next;
}Trimat[100];
链式存储-十字链表表示法
矩阵的每一行用一个带头结点的链表表示,每一列用一个带头结点的链表表示,这种储存结构中有5个分量:行分量,列分量、数据分量、以及指向两头结点的指针。
- 普通结点定义
typedef struct node{
int row,col;
struct node *right,*down;
int data;
}Node;
- 头结点结构定义
typedef struct{
Node *rhead,*chead;
int m , n , k;
}CrossList;