标签:exit 相加 数列 highlight case range typedef fine scan
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 225
#define N 9
typedef struct{
int i,j;
int e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;
int CreatSMatrix(TSMatrix &M){
M.mu= N;
M.nu = N;
M.tu = 0;
return 1;
}
void TransposeSMatrix(TSMatrix M,TSMatrix &T){
T.mu = M.mu;
T.nu = M.nu;
T.tu = M.tu;
int c=1;
for(int i = 1;i<N;i++){
for(int j = 1;j<N;j++){
if(M.data[c].e!=0){
T.data[c].e = M.data[c].e;
T.data[c].i = M.data[c].j;
T.data[c].j = M.data[c].i;
c++;
}
}
}
}
int InsertElem(TSMatrix *M,int row,int col,int e){
int i,t,p;
if(M->tu>=MAXSIZE){
printf("\nError:Insert position is beyond the arrange.\n");
return 0;
}
p=1;
if(M->tu==0){
M->data[p].i = row;
M->data[p].j = col;
M->data[p].e = e;
M->tu++;
return 1;
}
for(t=1;t<=M->tu;t++)//寻找合适的插入位置
if((row>=M->data[t].i)&&(col>=M->data[t].j))
p++;
if(row==M->data[t-1].i && col==M->data[t-1].j){//插入前,该元素已经存在
M->data[t-1].e=e;
return 1;
}
for(i=M->tu;i>=p;i--){//移动p之后的元素
M->data[i+1].i=M->data[i].i;
M->data[i+1].j=M->data[i].j;
M->data[i+1].e=M->data[i].e;
}
//插入新元素
M->data[p].i=row;
M->data[p].j=col;
M->data[p].e=e;
M->tu++;
return 1;
}
void AddSMatrix(TSMatrix M,TSMatrix T,TSMatrix &W){
int c=1;
for(int i = 1;i<=W.mu;i++){
for(int j = 1;j<=W.nu;j++){
if(i==M.data[c].i&&j==M.data[c].j&&i==T.data[c].i&&j==T.data[c].j){
W.data[c].e= M.data[c].e +T.data[c].e;
W.data[c].i = i;
W.data[c].j = j;
W.tu++;
c++;}
else if(i==M.data[c].i&&j==M.data[c].j){
W.data[c].e= M.data[c].e;
W.data[c].i = i;
W.data[c].j = j;
W.tu++;
c++;
}else if(i==T.data[c].i&&j==T.data[c].j){
W.data[c].e=T.data[c].e;
W.data[c].i = i;
W.data[c].j = j;
W.tu++;
c++;
}
}
}
}
void PrintfSMatrix(TSMatrix *M){
int i,j,p=1;
if(M->tu==0){
printf("0矩阵");
exit(0);
}
for(i=1;i<=M->mu;i++){
for(j=1;j<=M->nu;j++){
if(i==M->data[p].i&&j==M->data[p].j){
printf("%d\t",M->data[p].e);
p++;
}else{
printf("0\t");
}
}
printf("\n");
}
printf("\n");
}
int main(){
TSMatrix M,T,W;
CreatSMatrix(M);
CreatSMatrix(T);
CreatSMatrix(W);
int r,c,e,n,x,p=1;
printf("请输入非零元素的个数;");
scanf("%d",&n);
for(int i=0;i<n;i++){
printf("\请输入非零元素的行数列数及非零元素");
scanf("%d %d %d",&r,&c,&e);
InsertElem(&M,r,c,e);
}
for(int i=1;i<=M.mu;i++){
for(int j=1;j<=M.nu;j++){
if(i==M.data[p].i&&j==M.data[p].j){
printf("%d\t",M.data[p].e);
p++;
}else{
printf("0\t");
}
}
printf("\n");
}
while(1){
printf("1.转置 2.相加\n输入相应编号执行操作:");
scanf("%d",&x);
switch(x){
case 1:
TransposeSMatrix(M,T);
PrintfSMatrix(&T);
break;
case 2:
AddSMatrix(M,T,W);
PrintfSMatrix(&W);
exit(0);
}
}
return 0;
}
三元组顺序表表示的稀疏矩阵的转置和加法运算的实现----《数据结构》
标签:exit 相加 数列 highlight case range typedef fine scan
原文地址:http://www.cnblogs.com/peak01/p/7978556.html