稀疏矩阵与矩阵压缩
稀疏矩阵
矩阵中,0比较多
一、三元组顺序表
1.节点
typedef struct {
int row;//行下标
int col;//列下标
ele val;//元素
}Triple;
2.顺序表
typedef struct {
int rn;//行数
int cn;//列数
int tn;//非0元素个数
Triple data[MAX_SIZE];//节点库
}TMatrix;
3.实现代码
#include<iostream>
using namespace std;
#define MAX_SIZE 101
typedef int ele;
//三元组节点 结构体
typedef struct {
int row;//行下标
int col;//列下标
ele val;//元素
}Triple;
//三元组顺序表
typedef struct {
int rn;//行数
int cn;//列数
int tn;//非0元素个数
Triple data[MAX_SIZE];//节点库
}TMatrix;
int main() {
TMatrix mat;
mat.tn = 9;
mat.rn = 6;
mat.cn = 7;
for (int i = 0; i < mat.tn; i++) {
cin>> mat.data[i].val >> mat.data[i].col >> mat.data[i].row ;
}
return 0;
}
/*//这是数据
12 1 2
9 1 3
-3 3 1
4 3 8
24 4 3
2 4 6
18 5 2
-7 6 7
-6 7 4
*/
二、十字链表
稀疏矩阵中同一行的非0元素由right指针域链接成一个行链表,由down指针域链接成一个列链表。则每个非0元素既是某个行链表中的一个结点,同时又是某个列链表中的一个结点,所有非0元素构成一个十字交叉的链表。称为十字链表。
1.节点
typedef struct Clone {
int row, col;
ele val;
struct Clone* down, * right;//指向下面跟右边节点
}OLNode;
2.表
typedef struct Clnode {
int rn, cn, tn;//行,列,非0数
OLNode* rhead;//行指针
OLNode* chead;//列指针
}CrossList;
总结
有部分转载,详情见这里:这里