📄 seqsynmematrix2.h
字号:
#include "SeqList.h" //包含顺序表类
class SeqSynmeMatrix: public SeqList //n阶对称矩阵顺序表类
//SeqSynmeMatrix类以public方式继承SeqList类
{
friend void Product(SeqSynmeMatrix& a, SeqSynmeMatrix& b, SeqSynmeMatrix& c, int n);
//输出流重载
friend ostream& operator<< (ostream& out, const SeqSynmeMatrix& a);
private:
int n; //矩阵的阶数
public:
SeqSynmeMatrix(int max); //构造函数
~SeqSynmeMatrix(void) //析构函数
{};
void CreateMatrix(int nn, DataType item[]); //创建
void Add(SeqSynmeMatrix& a); //矩阵加
};
SeqSynmeMatrix::SeqSynmeMatrix(int max):SeqList(max)
//构造函数。首先调用顺序表类的构造函数,然后定义自身的初始值
{
n = 0;
}
void SeqSynmeMatrix::CreateMatrix(int nn, DataType item[])
//创建。创建一个置存储下三角元素的n阶对称矩阵顺序表
//矩阵的元素值来自一维数组item,二维矩阵元素以行序优先方式存于item中
{
n = nn; //置矩阵阶数
int i, j, k = 0;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(i >= j)
{
Insert(item[i*n+j], k);
k++;
}
}
void SeqSynmeMatrix::Add(SeqSynmeMatrix& a) //矩阵加
//this = this + a。假设两个矩阵都是对称矩阵
{
for(int i = 0; i < size; i++)
list[i] = list[i] + a.list[i];
}
ostream& operator<< (ostream& out, const SeqSynmeMatrix& a)
//输出流重载。
{
out << "对称矩阵阶数为:" << a.n << endl;
cout << "矩阵元素为:" << endl;
int i, j, k = 0, n = a.n;
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
if(i >= j)
{
k = i * (i - 1) / 2 + j - 1;
cout << setw(5) << a.list[k];
}
else
{
k = j * (j - 1) / 2 + i - 1;
cout << setw(5) << a.list[k];
}
cout << endl;
}
return out;
}
void Product(SeqSynmeMatrix& a, SeqSynmeMatrix& b, SeqSynmeMatrix& c, int n)
//采用压缩存储的对称矩阵的矩阵乘C=A×B,n为矩阵的阶数
{
int i, j, k, v, p, q, sum;
c.n = n;
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
{
if(i >= j)
{
v = i * (i - 1) / 2 + j - 1;
sum = 0;
for(k = 1; k <= n; k++)
{
if(i >= k) p = i * (i - 1) / 2 + k - 1;
else p = k * (k - 1) / 2 + i - 1;
if(j >= k) q = j * (j - 1) / 2 + k - 1;
else q = k * (k - 1) / 2 + j - 1;
sum = sum + a.list[p] * b.list[q];
}
c.list[v] = sum;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -