通过三元组存储稀疏矩阵,压缩存储空间
/*
稀疏矩阵的实现
*/
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
//存储域
const int MAX_N = 100;
class elem_node
{
public:
int elem_row;//元素行号
int elem_col;//元素列号
int elem_value;//元素值
};
class Node
{
public:
int total_row;//总行数
int total_col;//总列数
int total_num;//非0元素总数
elem_node data[MAX_N];//非0元素数组
};
class Matrix
{
public:
Matrix(){}
~Matrix(){}
//构建稀疏矩阵三元组
void CreateMat(string filename, int rows, int cols)
{
int i, j;
int fdata;
ifstream readFile;
mat.total_num = 0;
mat.total_col = cols;//总行数
mat.total_row = rows;//总列数
readFile.open(filename);
//打开错误
if (readFile.bad() || readFile.fail())
{
exit(0);
}
//文件正常打开
if (readFile.is_open())
{
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
readFile >> fdata;
if (readFile.good() && fdata != 0)
{
mat.data[mat.total_num].elem_row = i;//元素行号
mat.data[mat.total_num].elem_col = j;//元素列号
mat.data[mat.total_num].elem_value = fdata;//元素之
mat.total_num++;//存储数组下标+1
}
}
}
}
readFile.close();
}
//指定位置赋值,若不存在,则插入
bool Value(int elem, int i, int j)
{
if (i >= mat.total_row || j >= mat.total_col)
{
return false;
}
else
{
int k = 0, k1;
//搜索行号<3,5> <3,6> <3,7> <3,8> 查找<3,6>
while (k<mat.total_num&&i>mat.data[k].elem_row)
{
k+&#