第四章主要学习了串,数组,广义表这三个数据结构。   而我准备谈一谈我解决稀疏矩阵这道题的心得体会。这两周有三道问题,串的模式匹配、稀疏矩阵和AI核心代码。其中我认为最简单的就是稀疏矩阵,但是题目虽然简单,我认为还是可以将我的思考方式分享给大家。   以下是题目:

如果一个矩阵中,0元素占据了矩阵的大部分,那么这个矩阵称为“稀疏矩阵”。对于稀疏矩阵,传统的二维数组存储方式,会使用大量的内存来存储0,从而浪费大量内存。为此,可以用三元组的方式来存放一个稀疏矩阵。

对于一个给定的稀疏矩阵,设第r行、第c列值为v,且v不等于0,则这个值可以表示为 <。这个表示方法就称为三元组。那么,对于一个包含N个非零元素的稀疏矩阵,就可以用一个由N个三元组组成的表来存储了。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

如:{<1, 1, 9>, <2, 3, 5>, <10, 20, 3>}就表示这样一个矩阵A:A[1,1]=9,A[2,3]=5,A[10,20]=3。其余元素为0。

要求查找某个非零数据是否在稀疏矩阵中,如果存在则输出其所在的行列号,不存在则输出ERROR。

  看完题目后,以下是我的思考:首先题目已经很清楚的让我使用三元组表来解决问题,那么当然从这开始入手,一个稀疏矩阵中的数主要有三个属性:行、列、数值,那么我就先定义一个结构体将这三个属性包装起来 就可以当作三元组表的组成成员了。那么三元组表要怎么实现呢,我的想法是使用结构体数组,这也是最简单的方法。紧接着的就是数组的输入了,我定义了input_matrix这个函数直接输入数值,然后我定义了output_matrix 这个函数来实现判断是否存在并输出的功能,用一个简单的if判断即可输出,为使得输出方便一点,我引入了好用的flag。   以下是代码         #include<iostream> using namespace std;



typedef struct{     int i;//行     int j;//列     int value;//数值 }matrix;



matrix input() {//输入数值     matrix m;     cin>>m.i>>m.j>>m.value;     return m; }

 

void output_matrix(matrix m[],int value,int s) {//寻找是否存在并且输出它     int flag=1;//引入一个flag便于输出     for(int i=0;i<=s;i++)     {         if(m[i].value==value)         {             cout<<m[i].i<<" "<<m[i].j;             flag=1;             break;         }         else flag=0;     }     if(flag==0) cout<<"ERROR"; }

 

int main() {     int m,n,s;     cin>>m>>n>>s;     matrix a[500];     for(int i=0;i<s;i++)     {         a[i]=input();     }     int sum;     cin>>sum;     output_matrix(a,sum,s); }
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄