稀疏矩阵
来源:互联网 发布:明星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
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- AssetsLibrary/AssetsLibrary.h 相册获取
- iOS 过期提醒
- 《将博客搬至CSDN》
- 身份证
- Java之学习笔记(22)------------抽象类和接口
- 稀疏矩阵
- Android界面设计的4种方式之四——开发自定义的View
- cocos2d-x 3.x 弧度转角度(学习笔记)
- 定位图像中的指定目标实现源码
- 阅读《Android 从入门到精通》(12)——自动完成文本框
- 《Android源码设计模式解析与实战》读书笔记(二十二)
- 微信:JSSDK开发
- Android中的软引用(SoftRefrerence)和弱引用(WeakReference)
- Java之学习笔记(24)-----------垃圾回收机制