稀疏矩阵的存取

#include <iostream>
using namespace std;

const int MAX = 100;

typedef struct{     //定义添加元素的属性
    int row;
    int col;
    int item;
}Tripe;

class TripleMatrix {
private:
    Tripe data[MAX];
    int m, n, num;
public:
    TripleMatrix(int, int);       //有参构造
    TripleMatrix();               //无参构造
    ~TripleMatrix();              //析构
    bool setItem(Tripe);          //元素赋值
    int getIetm(int, int);        //获取元素值
    void printMatrix();           //按矩阵形式输出
    void printTripe();            //按压缩形式输出
};

TripleMatrix::TripleMatrix(int m, int n) {
    this->m = m;
    this->n = n;
    num = 0;
}
TripleMatrix::TripleMatrix() {
    m = n = num = 0;
}
TripleMatrix::~TripleMatrix() {}
bool TripleMatrix::setItem(Tripe tripe) {  //插入非零元
    if (tripe.row > m || tripe.col > n)    //超过最大行列数
        return false;
    if (num == MAX)                        //超过非零元素个数
        return false;
    if (tripe.item == 0)                   //插入元素值为0
        return false;
    int i = 0;                             //标记当前元素在非零元素中的排序
    while (i < num) {
        if (tripe.row > data[i].row)       //当前行低于目标行
            i++;
        else if ((tripe.row == data[i].row) && (tripe.col > data[i].col))  //当前列低于目标列
            i++;
        else   //到位
            break;
    }
    if((tripe.row == data[i].row) && (tripe.col == data[i].col)) {   //当前位置有非零元直接替换
        data[i] = tripe;
        return true;
    }
    else{          //当前位置为零,则向后移动
        for(int j = num; j > i; j--)
            data[j] = data[j-1];
        data[i] = tripe;
        num++;
        return true;
    }
}


int TripleMatrix::getIetm(int row, int col) {
    int i;
    if (row > m || col > n)
        return 0;
    else
        for (i = 0; i < num; i++)
            if (data[i].row == row && data[i].col == col)
                return data[i].item;
}

void TripleMatrix::printMatrix() {
    int temp = 0;
    for(int i = 1; i <= m; i++){
        for(int j = 1; j <= n; j++){
            if((data[temp].row == i) && (data[temp].col == j)) {
                cout << data[temp].item << " ";
                temp++;
            }
            else
                cout << 0 << " ";
        }
        cout << endl;
    }
    cout << "m = " << m << " n = " << n << " num = " << temp << endl;
}
void TripleMatrix::printTripe() {
    for(int i = 0; i < num; i++)
        cout << data[i].item << endl;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容