第四章小结-稀疏矩阵

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

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

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

如:{<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);
}

转载于:https://www.cnblogs.com/biss/p/10706868.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值