第五章(2)三元组顺序表

//---------------稀疏矩阵的三元组顺序表存储表示---------------//

#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( "输入错误,请重新输入" ) ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值