从基础数据结构一路杀到高级数据结构,历尽虚脱,在此奖励自己一个女神,希望能继续坚持。
本文参考自:
张铭《数据结构与算法》
目录
1 多维数组
1.1 用数组表示特殊矩阵
1.1.1 三角矩阵
1.1.2 对称矩阵
1.1.3 对角矩阵(diagonal matrix)
1.1.4 稀疏矩阵
1.1.5 稀疏矩阵的十字链表
2 广义表
L= (x0,x1,…,xi,…,xn-1)2.1 原子和子表
2.2 表头和表尾
2.3 结点结构
2.3.1 表示形式一
2.3.2 表示形式二
2.3.3 M元多项式的表示
2.4 广义表的深度
2.5 广义表的各种类型
2.5.1 纯表(pure list)
2.5.2 可重入表
2.5.3 循环表(递归表)
静态数组:必须在定义它的时候指定其大小和类型
动态数组:可以在程序运行才分配内存空间
多维数组 (Multi-array): 是向量的扩充,向量的向量就组成了多维数组
下三角矩阵
用一个长度为n(n+1)/2的1维数组A存储,{G00,G10,G11,……,Gn-1 0,…,Gn-1 n-1},
则Gij在A中对应的下标是:( i*(i+1)/2 + j )
上三角矩阵,Gij在A中对应的下标是:( j*(j+1)/2 +i )
对称矩阵的元素关于主对角线对称,只需存储矩阵中上三角或下三角中的元素,参考三角矩阵。
对角矩阵:主对角线之外的元素皆为0,常写为diag(a1,a2,...,an)
然而,很多数据结构将对角矩阵定义为(至于哪个是对的,我目前也不太清楚)
单个节点
row:矩阵中的行。
col:矩阵中的列。
val:矩阵中的值。
right:指向右侧的一个非零元素(指向所在行的下一个元素)
down:指向下侧的一个非零元素(指向所在列的下一个元素)
稀疏矩阵乘法时间代价
推荐:http://data.biancheng.net/view/19.html
单纯想放个图,缓解下。
广义表 (Generalized Lists,也称Multi-list):一个线性表中包括一个或者多个子表,又称为列表,记作
在广义表中,单个元素被称为 “原子”;包含的广义表被称为 “子表”。
例如:A = () :广义表A 为空表,长度为 0
B = (e) :广义表 B 中只有一个原子 e ,长度为 1
C = (a,(b,c,d)) :广义表 C 中有两个元素,原子 a 和子表 (b,c,d) ,长度为 2
D = (A,B,C) :广义表 D 中有三个元素:子表 A、B、C,长度为 3 ,这种表示方式等同于: D = ((),(e),(b,c,d))
E = (a,E) :广义表 E 中有两个元素,原子 a 和它本身,长度为 2 。这是一个递归的表,等同于:E = (a,(a,(a,…)))
A = () 和 A = (()) 是不一样的:前者是空表,长度为 0 ;后者表的长度为 1 ,包含的元素是一个子表,只不过这个子表是空表
当广义表不为空时,称表中的第一个元素为表的 “表头” ;剩余所有元素组成的表为 “表尾” 。
上边例子中的 D = (A,B,C) ,子表 A 为广义表 D 的表头;而 (B,C) 组成的表为 D 的表尾。
由于广义表中的数据元素类型分为原子和子表,难以使用顺序存储结构表示,所以通常采用链式存储结构。
原子:标志位 + 值域
子表:标志位 + 指向表头的指针域 hp+ 指向表尾的指针域tp
例如.....................................................................................................................................
C = (a,(b,c,d))
一般标志位为1,表示子表;标志位为0,表示原子。
原子:标志位 + 值域 + 指向下一个数据元素的指针域tp
子表:标志位 + 指向表头的指针域 hp+ 指向下一个数据元素tp
例如.....................................................................................................................................
C = (a,(b,c,d))
少说废话,多消化栗子
有一个三元多项式(三个变量x,y,z),如下:
多项式进行变形:
此时,P(x,y,z)可以表示为:
经过两轮转化后,P这个 3 元多项式分解成了由 A 多项式和 B 多项式组成的一元多项式(只有一个变元 z ),而 A 也变成了由 C 多项式和 D 多项式组成的一元多项式。
当全部转化成能用一元多项式表示时,每一个一元多项式只需要存储各项的指数和系数就可以了。
exp:存放指数
coef:存放多项式的系数
hp:指向表头的指针域
tp:指向下一个数据元素
广义表的深度:广义表中括号的重数。
例如:..............................................................................................................
C=(a,(b,c,d))
从前往后数左括号的数量就是广义表C的深度,为2;也可以从右往左数右括号的数量(红色)
E = (a,E) :广义表 E 中有两个元素,原子 a 和它本身,长度为 2 。这是一个递归的表,等同于:E = (a,(a,(a,…)))。
通俗的来说,就是自己包含自己
当你以为马上就要学完的时候,其实还有
《高级数据结构之猝死攻略(二)》:https://blog.csdn.net/wydyd110/article/details/82225499