#include<stdio.h>//std(standard) IO #include<stdarg.h>//std(standard) arguments #define OK 1 #define ERROR 0 #define MAXDIM 8//定义的最大数组维度 #define MAXSIZE 100//三元组的最大数量 typedef int Status;//表示返回的状态值 typedef int ElemType//int来表示某一种元素类型 /* 1、一般矩阵用二维数组存储即可,这里主要讨论的是对矩阵进行压缩存储,对于一般无规律矩阵无法进行很有效的压缩 这里主要有两种矩阵: 1、特殊矩阵(有某种规律的矩阵),如对称矩阵或三角矩阵,可以存储一半即可 2、稀疏矩阵(一般指0的个数占所有个数的比重<=0.05的矩阵),通过三元法来存储矩阵可以有效地进行压缩 2、其中稀疏矩阵的实现方式有三种,分别是:三元组顺序表(数组实现); 带行逻辑链接的顺序表(数组实现,可以索引行); 十字链表(链表实现,由于是链表,因此不能索引,但其主要的优势在于可以随意插入和删除元素,有利于矩阵的加减) 3、 4、 5、 */ //一个三元组的定义 //三元组用来存储矩阵的一个元素 typedef struct { int i;//行 int j;//列 ElemType e; }Triple; //稀疏矩阵的结构体定义 // typedef struct SparseMatrix { Triple data[MAXSIZE+1];//存储矩阵,data[0]不存储,这里是顺序存储元素,即行小的先在前面,然后按列排序,小的在前 int row;//总行数 int col;//总列数 int total;//总的非零元素个数 }SMatrix; //矩阵的转置 //实现方式是将各个元素的i与j对换,但是同时要进行排序 //由于M已排序,通过循环搜索某一列(匹配j的值),得到的元素的得到的先后顺序就是转置后 对应的行的元素的先后顺序 //时间复杂度为O(total*colunm),非常耗时,仅可用于total很小的情况下 Status TransposeSMatrix(SMa
稀疏矩阵SMatrix定义与操作
最新推荐文章于 2023-06-05 23:26:17 发布