第五章 数组
程序员文章站
2022-03-10 19:55:26
...
1.数组的定义
2.实验报告
3.实验报告
(1)编程实现稀疏矩阵的三元组顺序表示方法及基本操作的实现(建立、输出、转置等)
#include <stdio.h>
#include <iostream>
using namespace std;
#include <iomanip>
#include <string.h>
#include <malloc.h>
#include <process.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1
typedef int Status;
TSMatrix_def.h
#define MAXSIZE 20
typedef int ElemType;
typedef struct{
int i,j;
ElemType e;
}Triple;
typedef struct{
Triple data[MAXSIZE];
int mu,nu,tu;
}TSMatrix;
main
#include "com_def.h"
#include "TSMatrix_def.h"
Status Craet(TSMatrix &L){
Triple a;
cout<<"请输入矩阵的行数:";
cin>>L.mu;
cout<<"请输入矩阵的列数:";
cin>>L.nu;
int i=0;
for(i=0;;i++){
cout<<"请输入该元素的行号:";
cin>>a.i;
cout<<"请输入该元素的列号:";
cin>>a.j;
cout<<"请输入该元素的值:";
cin>>a.e;
L.data[i]=a;
char c='y';
cout<<"继续输入请输入y(Y),否则退出:";
cin>>c;
if(c!='y'&&c!='Y'){
break;
}
}
L.tu=i+1;
return OK;
}
Status Transpose(TSMatrix L,TSMatrix &M){//M为L的转置 行是mu i是行 ,快转
M.mu=L.nu;
M.nu=L.mu;
M.tu=L.tu;
int col,q;
int b[L.nu];//第i行有几个元素
for(int i=0;i<L.nu;i++) b[i]=0;
int c[L.nu+1];//这几个元素从哪一个下标开始放
for(int i=0;i<L.tu;i++){
b[L.data[i].j-1]++;
/*if(L.data[i].e!=0){
b[L.data[i].j]++;//第j列(转置后为第j行)非零元素个数
}*/
}
c[1]=0;
for(int i=2;i<=L.nu;i++){
c[i]=c[i-1]+b[i-2];//算出从第几个开始放
}
for(int i=0;i<L.tu;i++){//i行j列
//L.data[i].j
col=L.data[i].j;
q=c[col];
M.data[q].i=L.data[i].j;
M.data[q].j=L.data[i].i;
M.data[q].e=L.data[i].e;
c[col]++;
}
/*for(int i=0;i<4;i++){
cout<<M.data[i].e<<"||";
}*/
return OK;
}
int main(int argc, char** argv) {
TSMatrix L,M;
Craet(L);
cout<<"原行:"<<L.mu<<"\t"<<"原列:"<<L.nu<<endl;
for(int i=0;i<L.tu;i++){
cout<<"行:"<<L.data[i].i<<" 列:"<<L.data[i].j;
cout<<" 元素为:"<<L.data[i].e<<endl;
}
Transpose(L,M);
cout<<"快速转置后:";
cout<<"现行:"<<M.mu<<"\t"<<"现列:"<<M.nu<<endl;
for(int x=0;x<M.tu;x++){
cout<<"行:"<<M.data[x].i<<" 列:"<<M.data[x].j<<" 元素为:"<<M.data[x].e<<endl;
}
}
上一篇: java栈实现中缀转后缀并计算后缀表达式
下一篇: 数据结构——内部排序算法