广义表
广义表
- 广义表是线性表的推广;
- 对于线性表而言,n个元素都是基本的单元素;
- 广义表中,这些元素不仅可以是单元素也可以是另一个广义表;
typedef struct GNode *GList;
struct GNode{
int Tag; //标志域:0表示结点是单元素,1表示结点是广义表
union{ //子表指针域SubList与单元素数据域Data复用,即公用存储空间
ElementType Data;
GList SubList;
}URegion;
GList Next;//指向后继结点
};
多重链表
多重链表:链表中的结点可能同时隶属于多个链
- 多重链表中结点的指针域会有多个,如前面包含了Next和SubList两个指针域
- 但包含两个指针域的链表并不一定是多重链表,比如,双向链表不是多重链表
多重链表有广泛的用途:基本上如树、图这样相对复杂的数据结构都可以采用多重链表方式实现存储
矩阵
矩阵可以用二维数组表示,但二维数组表示有两个缺陷:
- 数组的大小需要事先确定,
- 对于“稀疏矩阵,将造成大量的存储空间浪费。
可以采用一种典型的多重链表——十字链表来存储系数矩阵
-
只存储矩阵非0元素项
结点的数据域:行坐标Row,列坐标Col,数值Value
-
每个节点通过两个指针域,把同行、同列串起来
- 行指针(或称为向右指针)Right
- 列指针(或称为向下指针)Down
-
用一个标识域Tag区分头结点和非0元素结点
-
头结点的标识值为”Head“,矩阵非0元素结点的标识值为”Term“