稀疏矩阵SMatrix定义与操作

#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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值