クロスチェーンテーブル&疎マトリクス

3277 ワード

#include<stdio.h>
#include<stdlib.h>


typedef struct OLNode
{
    int i,j;    //            
    int e;    //       
    struct OLNode *right,*down; //                  
}OLNode, *OLink;
typedef struct//             , CreatSMatrix_OL()  
{
    OLink *rhead, *chead; 
    int mu, nu, tu;        //        、         
}CrossList;


//    M(CrossList          ,    、       ) 
bool InitSMatrix(CrossList &M)
{
    M.rhead=M.chead=NULL;
    M.mu=M.nu=M.tu=0;
    return true;
}


//       
bool CreateSMatrix(CrossList &M,int m,int n,int t)
{ 
    int i,j,k;
    int e;
    M.mu=m;
    M.nu=n;
    M.tu=t;
    //       
    M.rhead=(OLink*)malloc((m+1)*sizeof(OLNode));
    if(!M.rhead)
        exit(0);
    //       
    M.chead=(OLink*)malloc((n+1)*sizeof(OLNode));
    if(!M.chead)
        exit(-1);
    for(k=1;k<=m;++k) //          ;         
        M.rhead[k]=NULL;
    for(k=1;k<=n;++k) //          ;         
        M.chead[k]=NULL;
    printf("   %d            :
",M.tu); OLink p,q; for(k=0;k<t;++k) { scanf("%d%d%d",&i,&j,&e); p=(OLNode*)malloc(sizeof(OLNode)); if(!p) exit(-1); p->i=i; // p->j=j; p->e=e; // , if(M.rhead[i]==NULL||M.rhead[i]->j>j) { // p p->right=NULL; M.rhead[i]=p; } else // { // , for(q=M.rhead[i]; q->right!=NULL && q->right->j < j;q = q->right) p->right=NULL; // , // p->right=q->right , q->right=p; } // if(M.chead[j] == NULL || M.chead[j]->i > i) { // p p->down = NULL; M.chead[j] = p; } else // { for(q = M.chead[j];q->down && q->down->i < i;q = q->down) ; p->down=NULL; // q->down=p; } } return true; } bool CheckSMatrix(CrossList &M,int i,int j,int &e) { OLink p=M.rhead[i]; while(p&&p->j!=j) p=p->right; if(!p) return false; e=p->e; return true; } // M bool PrintSMatrix(CrossList &M) { int i,j,e; OLink p,q,r; printf("%d %d %d
",M.mu,M.nu,M.tu);// for(i=1;i<=M.mu;++i) { for(j=1;j<=M.nu;++j) { if(CheckSMatrix(M,i,j,e)) printf("%d ",e); else printf("%d ",0); } printf("
"); } return true; } int main() { int m,n,t; CrossList A,B,C; InitSMatrix(A); // CrossList InitSMatrix(B); printf(" A:
"); printf(" :"); scanf("%d",&m); printf(" :"); scanf("%d",&n); printf(" :"); scanf("%d",&t); CreateSMatrix(A,m,n,t); printf(" A:
"); PrintSMatrix(A); system("pause"); }