设计一个稀疏矩阵
说明:该矩阵行列数都比较大,能达到几十上百万;
要求:无论按行还是按列查询,时间复杂度在log(n)以内;
方便插入和整列整行的删除操作;
尽量节省空间;
[解决办法]
看看这种, Hmxn
H a00 a01 a02 …… a0n-1
…… …… …… …… ……
am-1 0 …… am-1 n-1
//只是存储非0值的列值和值
//每行中的一个值
typedef struct tag_Ver
{
int col; //该值在这一行中的位置
int nValue; //值
struct tag_Ver *pNext; //右边的一个
}Ver;
//每一行
typedef struct tag_Row
{
Ver *pVer; //指向这一行中的值
struct tag_Row *pNext; //指向下一行
}Row;
typedef struct tag_Matrix
{
int m; //m
int n; //n
Row *pHead; //行的开始
}Matrix;
图形说明如下:
■代表一行
○代表这一行中具体的值节点
//矩阵图形如下:
H
↓
pHead
↓
■→○→○→ …… →○
↓
■→○→○→ …… →○
↓
……
↓
■→○→○→ …… →○
//实现说明
他的加实现起来有点复杂,乘法实现起来比较简单
插入行比较简单,但是插入列就有点麻烦了
当然如果你不怕麻烦可以用《数据结构》严蔚敏 编著 上的十字链表