📄 zz.txt
字号:
#include <iostream>
#include <process.h>
using namespace std;
#define MAXSIZE 12500
#define OK 1
typedef int Status;
typedef struct {
int i,j;//非零元的行下标和列下标
int e;//值
}Triple;
typedef struct {
Triple data[MAXSIZE+1];//存储三元组表,不用data[0];
int mu,nu,tu;//距阵的行数、列数和非零元个数
}TSMatrix;
static int count=1;//用来计算非零元素个数
Status TransposeSMatrix(TSMatrix M,TSMatrix &T){
//采用三元组顺序表存储表,求距阵M的转置距阵T
int col;
int num[100];
int cpot[100];
int q;
T.mu=M.nu;
T.nu=M.mu;
T.tu=M.tu;
if(T.tu){
for(col=1;col<=M.nu;++col)
num[col]=0;
for(int t=1;t<=M.tu;++t)
++num[M.data[t].j];//求M中每一列含非零元个数
cpot[1]=1;
//求第col列中第一个非零元在b.data中的序号
for(col=2;col<=M.nu;++col) cpot[col]=cpot[col-1]+num[col-1];
for(int p=1;p<=M.tu;++p){
col=M.data[p].j;
q=cpot[col];
T.data[q].i=M.data[p].j;
T.data[q].j=M.data[p].i;
T.data[q].e=M.data[p].e;
++cpot[col];
}//for
}//if
return OK;
}
void send(TSMatrix &M,int flag1,int flag2,int a){//将按行输入的矩阵数据,将已经选择的非零数据保存在三元数组中
M.data[count].i=flag1;
M.data[count].j=flag2;
M.data[count].e=a;
count++;
}
void main(){
int k,i,j;
int n,m;//行数,列数
int a[100][100];
TSMatrix M;
TSMatrix T;
cout<<"请输入矩阵的行数:";
cin>>n;
M.mu=n;
cout<<"请输入矩阵的列数:";
cin>>m;
M.nu=m;
cout<<"请用户依次输入矩阵的"<<n*m<<"个元素:"<<endl;
for(i=1;i<=n;i++){//输出矩阵的图
for(j=1;j<=m;j++){
cin>>a[i][j];
cout<<a[i][j]<<" ";
if(a[i][j]!=0)//选择非零元素
send(M,i,j,a[i][j]);//将非零元素传到三元组
if(i==n&&j==m){
cout<<"输入完毕"<<endl;
break;
}
}
cout<<"\n";
}
M.tu=count-1;
TransposeSMatrix(M,T);
for(i=1;i<=m;i++){//将二维数组清空,为输出转置矩阵做准备
for(j=1;j<=n;j++){
a[i][j]=0;
}
}
for(k=1;k<=M.tu;k++){//将三元数组的内容传到二维数组
i=T.data[k].i;
j=T.data[k].j;
a[i][j]=T.data[k].e;
}//for
cout<<"\n";
cout<<"转置矩阵:"<<endl;
for(i=1;i<=m;i++){//打印出转置矩阵
for(j=1;j<=n;j++){
cout<<a[i][j]<<" ";
}
cout<<"\n";
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -