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

断开长难句-标点

断开长难句-连接词

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

  • 结束于标点
  • 结束于下一个连接此前
  • 结束于第二个谓语动词前

断开长难句-分析主谓

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

  1. 主谓主谓
  2. 主谓
_____  从句
加粗   主语
标黄   谓语
  • 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;