学习 了矩阵和特殊矩阵的相关操作训练,下面主要以矩阵的行或者列为主序的存储方法和特殊矩阵中的稀疏矩阵的存储方法,掌握特殊矩阵的特点;掌握特殊矩阵的存储。想着记录自己的学习成功,也顺便和广大的程序员大师分享一下经验,希望能得到大家的支持和帮助,有错误的地方请大家帮忙指出,我会加以改进,谢谢大家!
编程时主要有以下三点建议:
- 实现以列序为主序的存储方式的存储,元素的输出
- 学会顺序存储稀疏矩阵
- 以行序或列序存储时要注意数组的位置顺序
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;
}