//---------------稀疏矩阵的三元组顺序表存储表示---------------//
#include <stdio.h>
#include <stdlib.h>#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define UNDERFLOW -3#define MAXSIZE 12500 //非零元个数的最大值
typedef int Status; //函数一般有返回值最好,即使没有用,也可以用来判断
typedef int ElemType ;typedef struct
{
int row , col ; //非零元素的行下标和列下标
ElemType e ;
} Triple ;typedef struct
{
Triple data[ MAXSIZE + 1 ] ; //非零元的三元组,data[0]未用
int mu , nu , tu ; //此处是矩阵的行数(mu)、列数(nu)而不是三元组的行数和列数 . 非零元个数(tu)
} TSMatrix ;//------------------function!-------------------//
Status CreatTSMatrix( TSMatrix *M )
{
int i , j , k = 1 ;
ElemType a ;
printf( "please input the rows,cols and numbers:" ) ;
scanf( "%d %d %d" , &( *M ).mu , &( *M ).nu , &( *M ).tu ) ;if( ( ( *M ).mu <= 0 ) || ( ( *M ).nu <= 0 ) || ( ( *M ).tu <= 0 ) || ( ( *M ).tu > ( *M ).mu * ( *M ).nu ) )
{ //判断行值、列值、元素个数是否合法
return ERROR;
}
// fflush( stdin ) ;
while( ( *M ).tu > ( *M ).mu * ( *M ).nu )
{
printf( "please input the rows,cols and numbers:" ) ;
scanf( "%d %d %d" , &( *M ).mu , &( *M ).nu , &( *M ).tu ) ;
}
printf( "please input the Matrix:" ) ;
for( i = 0 ; i < ( *M ).mu ; ++ i ) //特别要注意此处行和列的下标是从零开始的
{
printf( "\n" ) ;
for( j = 0 ; j < ( *M ).nu ; ++ j )
{
scanf( "%d," , &a ) ; //input Matrix
if( 0 != a ) //put the none zero element into
{
if( k > ( *M ).tu )
{
exit( OVERFLOW ) ;
}
( *M ).data[ k ].row = i ;
( *M ).data[ k ].col = j ;
( *M ).data[ k ].e = a ;
++ k ;
}
}
}
/*
for( i = 1 ; i <= ( *M ).tu ; i ++ )
{ //输入稀疏矩阵元素
printf( "请输入元素坐标及大小:" ) ;
scanf( "%d %d %d" , ( *M ).data[ i ].row , ( *M ).data[ i ].col , ( *M ).data[ i ].e ) ;
if( ( ( *M ).data[ i ].row <= 0 ) || ( ( *M ).data[ i ].col <= 0 ) )
{
printf( "输入错误,请重新输入" ) ;
第五章(2)三元组顺序表
最新推荐文章于 2023-04-25 20:36:56 发布