数据结构-稀疏矩阵-十字链表存储

当矩阵的非零元个数与位置在操作中变化较大时,就不宜用顺序存储结构来表示三元组的线性表。

在链表中,每个非零元可用一个含5个域的结点表示,其中i,j,e这三个域分别表示该非零元所在的行的值,向右域right用以链接同一行中下一个非零元,向下域down用以链接同一列中下一个非零元,向右域right用以链接同一行中下一个非零元,向下域down用以链接同一列中下一个非零元。同一行的非零元通过right域链接成一个线性链表,同一列的非零元通过down域链接成一个线性链表,每个非零元既是某个行链表中的一个结点,有是某个列链表中的一个结点,整个矩阵构成了一个十字交叉的链表,故称这样的存储结构为十字链表。

首先是辅助宏的定义:

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1
#define UNDERFLOW -2
typedef int Status;
typedef int ElemType;

稀疏矩阵的十字链表的存储表示:

//稀疏矩阵的十字链表的存储表示
typedef struct OLNode{
   int i,j;//非零元的行和列下标
   ElemType e;
   struct OLNode *right,*down; //该非零元的所在行表和列表的后继链域
}OLNode,*OLink;
typedef struct{
   OLink *rhead,*chead;//行和列链表头指针向量基址由CreateSMatrix分配
   int mu,nu,tu;//稀疏矩阵的行数列数和非零元个数
}CrossList;

创建稀疏矩阵M。

你可能感兴趣的:(数据结构,数据结构)