稀疏矩阵

来源:互联网 发布:明星ins是什么软件 编辑:程序博客网 时间:2024/04/29 06:01
#ifndef __SMATRIX_H_#define __SMATRIX_H_#include <iostream>using namespace std;const int MAXR = 20;//最大行数const int MAXC = 20;//最大列数const int MaxSize = 100;//最大元素个数struct TupNode{    int r;      //行号    int c;      //列号    int d;      //元素值};//class SMatrixClass{public:    SMatrixClass();    ~SMatrixClass();    void CreateTSMatrix(int A[][MAXC],int m,int n);//创建三元组    bool Setvalue(int i,int j,int x);//三元组元素赋值    bool GetValue(int i,int j,int &x);//将指定位置的元素值赋给变量    void DispMat();                   //输出三元组    void Transpose(SMatrixClass &tb); //转置矩阵private:    int rows;    int cols;    int nums;    TupNode *data;};//SMatrixClass::SMatrixClass(){    data = new TupNode[MaxSize];}SMatrixClass::~SMatrixClass(){    delete []data;}//从一个二维稀疏矩阵创建其三元组,以行方式扫描二维稀疏矩阵A,将其非零元素插入到三元组的data数组中void SMatrixClass::CreateTSMatrix(int A[][MAXC],int m,int n){    int i,j;    rows = m;    cols = n;    nums = 0;    for(i = 0; i<m; ++i)    {        for(j = 0;j<n;++j)        {            if(A[i][j] != 0)            {                data[nums].r = i;                data[nums].c = j;                data[nums].d = A[i][j];                ++nums;            }        }    }}//执行A[i][j] = x,在三元组表示的data数组中找到适当的位置kbool SMatrixClass::Setvalue(int i,int j,int x){    int k = 0, k1;    if(i<0 || i>rows || j<0 || j>cols)        return false;    while(k<nums&&i>data[k].r)        ++k;    while(k<nums&&i == data[k].r&&j>data[k].c)        ++k;    if(data[k].r == i&&data[k].c == j)        data[k].d = x;    else    {        for(k1 = nums - 1;k1>k;k1--)        {            data[k1+1].r = data[k1].r;            data[k1+1].c = data[k1].c;            data[k1+1].d = data[k1].d;        }        data[k].r = i;        data[k].c = j;        data[k].d = x;    }    return true;}//bool SMatrixClass::GetValue(int i,int j,int &x){    int k = 0;    if(i<0||i>=rows||j<0||j>cols)        return false;    while(k<nums&&data[k].r<i)        ++k;    while(k<nums&&i == data[k].r&&j>data[k].c)        ++k;    if(data[k].r == i&&data[k].c == j)        x = data[k].d;    else        x = 0;    return true;}//void SMatrixClass::DispMat(){    int i;    if(nums<=0)        return ;    cout<<"\t"<<rows<<"\t"<<cols<<"\t"<<nums<<endl;    cout<<"\t------------------\n";    for(i = 0; i<nums; ++i)    {        cout<<"\t"<<data[i].r<<"\t"<<data[i].c<<"\t"<<data[i].d<<endl;    }}//void SMatrixClass::Transpose(SMatrixClass &tb){    int p, q = 0,v;    tb.rows = cols;    tb.cols = rows;    tb.nums = nums;    if(nums != 0)    {        for(v = 0;v<cols;++v)        {            for(p = 0; p<rows; ++p)            {                if(data[p].c == v)                {                    tb.data[q].r = data[p].c;                    tb.data[q].c = data[p].r;                    tb.data[q].d = data[p].d;                    ++q;                }            }        }    }}#endif // __SMATRIX_H_

0 0
原创粉丝点击