矩阵的操作训练

学习 了矩阵和特殊矩阵的相关操作训练,下面主要以矩阵的行或者列为主序的存储方法和特殊矩阵中的稀疏矩阵的存储方法,掌握特殊矩阵的特点;掌握特殊矩阵的存储。想着记录自己的学习成功,也顺便和广大的程序员大师分享一下经验,希望能得到大家的支持和帮助,有错误的地方请大家帮忙指出,我会加以改进,谢谢大家!

编程时主要有以下三点建议:

  1. 实现以列序为主序的存储方式的存储,元素的输出
  2. 学会顺序存储稀疏矩阵
  3. 以行序或列序存储时要注意数组的位置顺序

1、从键盘输入以下矩阵,以列序为主序的存储方式把矩阵存储到一个一维数组A中,并能实现:从键盘输入矩阵元素的行、列值,能够在数组A中找到此元素并输出。

 下面看代码:

#include<iostream>

using namespace std;

int main()

{

    int x,y;

    cout<<"请输入矩阵的行数:";

    cin>>x;

    cout<<"请输入矩阵的列数:";

    cin>>y;

    int**arr=new int*[y];                 //动态创建数组

    cout<<"请输入矩阵B:\n";

    for(int i=0;i<x;i++)                  //循环输入一个矩阵

    {

        arr[i]=new int[y];               //

    }

    for(int i=0;i<x;i++)

    {

        for(int j=0;j<y;j++)

        {

            cin>>arr[i][j];             //循环按行为主序存储数组

        }

    }

    int n=x*y;                                //建立新的一维数组下标

    int*A=new int[n];                         //初始化一维数组,也就是线性表

    cout<<"以列序为主序的存储的线性表为:\n";

    int a=0;

for(int i=0;i<y;i++)            //循环将矩阵以线性表的形式输出

    {

        for(int j=0;j<x;j++)      

        {

            A[a]=arr[j][i];        //按列的形式赋值给线性表A

            cout<<A[a]<<" ";

            a++;

        }

    }

    cout<<"\n请输入行和列:";

    int b,c;

cin>>b>>c;

    int i=(c-1)*x+b;                     //求元素位置的公式,因为是列为主序,所以每列相差4个元素

    cout<<"矩阵中第"<<b<<"行"<<"第"<<c<<"列的元素在线性表的第"<<i<<"个位置"<<endl;

    //system(pause);

    return 0;

}

2、创建一个稀疏矩阵,将其用顺序存储结构的方式进行存储。

#include<iostream>

#define Max 50

using namespace std;

template<typename T>

struct Z

{

       int x;

       int y;

       T data;

};

template<typename T>

int main()

{

       int n=0;Z A[Max];

       int arr[3][3]={{1,2,3},

                      {0,4,0},

                      {5,0,6}};

       for(int i=0;i<3;i++)

       {

              for(int j=0;j<3;j++)

              {

                     if(arr[i][j]!=0)

                     {

              A[n].data=arr[i][j];

                            A[n].x=i;A[n].y=j;

                            n++;

                     }

              }

       }

       for(int i=0;i<n;i++)

       {

              cout<<"\n元素"<<i+1<<"位置:"<<A[i].x+1<<" "<<A[i].y+1;

              cout<<"数值:"<<A[i].data<<" ";

       }

    //system(pause);

       return 0;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海哥的C++养成之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值