📄 seqspamatrix.h
字号:
struct DataType //顺序表的数据元素类型
{
int row; //行号
int col; //列号
ElemType value; //元素值
};
#include "SeqList.h" //包含顺序表类
class SeqSpaMatrix: public SeqList //三元组顺序表类
//SeqSpaMatrix类以public方式继承SeqList类
{
//输出流重载
friend ostream& operator<< (ostream& out, const SeqSpaMatrix& a);
private:
int rows; //稀疏矩阵的行数
int cols; //稀疏矩阵的列数
int dNum; //稀疏矩阵的非零元个数
public:
SeqSpaMatrix(int max); //构造函数
~SeqSpaMatrix(void) //析构函数
{};
void CreateMatrix(int r, int c, int d, DataType item[]);//创建
void Transpose(SeqSpaMatrix& a); //转置
};
SeqSpaMatrix::SeqSpaMatrix(int max):SeqList(max)
//构造函数。首先调用顺序表类的构造函数,然后定义自身的初始值
{
rows = cols = dNum = 0;
}
void SeqSpaMatrix::CreateMatrix(int r, int c, int d, DataType item[])
//创建。创建一个有r行、c列和d个非零元的三元组顺序表
//创建的数值来自数组item
{
rows = r;; //置行数
cols = c; //置列数
dNum = d; //置非零元个数
for(int i = 0; i < d; i++) //依次插入三元组元素
Insert(item[i], i);
}
void SeqSpaMatrix::Transpose(SeqSpaMatrix& a)
//转置。把三元组顺序表转置为三元组顺序表a
{
if(a.maxSize < maxSize) //内存空间不足时重新申请
{
delete []a.list;
a.list = new DataType[maxSize];
a.maxSize = maxSize;
}
a.cols = rows; //置列数
a.rows = cols; //置行数
a.dNum = dNum; //置非零元个数
for(int i = 0; i < dNum; i++) //依次转置
{
a.list[i].row = list[i].col;
a.list[i].col = list[i].row;
a.list[i].value = list[i].value;
}
}
/*
void SeqSpaMatrix::Transpose(SeqSpaMatrix& a)
//转置。把三元组顺序表转置为三元组顺序表a
//转置后的矩阵按先行下标再列下标的次序排列
{
if(a.maxSize < maxSize) //内存空间不足时重新申请
{
delete []a.list;
a.list = new DataType[maxSize];
a.maxSize = maxSize;
}
a.cols = rows; //置列数
a.rows = cols; //置行数
a.dNum = dNum; //置非零元个数
if(dNum == 0) return;
else
{
int i, j, k;
i = 0; //i为a.list[]的下标值
for(k = 1; k <= cols; k++) //k为原矩阵的列下标
{
for(j = 0; j < a.dNum; j++) //j为list[]的下标值
{
if(list[j].col == k) //寻找原矩阵中列下标最小值
{
a.list[i].row = list[j].col; //列号转为行号
a.list[i].col = list[j].row; //行号转为列号
a.list[i].value = list[j].value; //数组元素复制
i++;
}
}
}
}
}
*/
ostream& operator<< (ostream& out, const SeqSpaMatrix& a)
//输出流重载。
{
out << "矩阵行数为:" << a.rows;
out << ",列数为:" << a.cols;
out << ",非零元个数为:" << a.dNum <<endl;
cout << "矩阵非零元三元组为:" << endl;
for(int i = 0; i < a.dNum; i++)
out << "a(" << a.list[i].row << ',' << a.list[i].col << ") = "
<< a.list[i].value << endl;
return out;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -