数据结构(知识点碎片十一)

163 阅读2分钟

三元组表示法

若把稀疏矩阵的三元组线性表按顺序存储结构存储,则称为稀疏矩阵的三元组顺序表简称为三元组表(list of 3-tuples)。(三元组类型TupNode;三元组顺序表的类型TSMatrix)

第0行存储非零元素的个数、矩阵行数、矩阵列数(存值、行标、列标)

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;

邻接表表示法


十字链表表示法

十字链表(orthogonal list)是稀疏矩阵的一种链式存储结构(相应的,前面的三元组顺序表是稀疏矩阵的一种顺序存储结构)。


(四)、广义表的定义

广义表(generalized table / Glist)是线性表的推广,是有限个元素的序列,其逻辑结构采用括号表示法表示如下:
GL=(a1,a2,…,ai,…,an)
其中n表示广义表的长度,即广义表中所含元素的个数,n≥0。若n=0,称为空表。a,为广义表的第i个元素,如果ai属于原子类型(原子类型的值是不可分解的,如C/C++语言中的整型、实型和字符型等),称为广义表GL的原子(atom);如果ai又是一个广义表,称为广义表GL的子表(subgeneralized table)。


(五)、广义表的特性

  1. 广义表中的数据元素是有相对次序的。
  2. 广义表的长度定义为最外层包含元素的个数。
  3. 广义表的深度定义为所含括弧的重数,其中原子的深度为0,空表的深度为1。
  4. 广义表可以共享,一个广义表可以被其他广义表共享,这种共享广义表称为再入表。
  5. 广义表可以是一个递归的表,一个广义表可以是自己的子表,这种广义表称为递归表。递归表的深度是无穷值,而长度是有限值。

表头 (Head) 和表尾 (Tail) :当广义表非空时,第一个元素为广义表的表头,其余元素组成的表是广义表的表尾。
GetHead(B)=d     GetTail(B)=(e)    加括号表示e的广义表
GetHead(D)=B    GetTail(D)=(C)    加括号表示C的广义表
GetHead((a)) =(a)    GetTail((a)) = ( )


(六)、广义表的存储结构

  • 头尾链表存储结构

1代表广义表结点,0代表原子结点

  • 扩展线性表存储结构