[数据结构]如何节省程序空间

数据结构---如何节省空间
1,稀疏矩阵
稀疏矩阵
定义:对于那些零元素数目远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称为稀疏矩阵(sparse)。

如果矩阵中每一个点都用数组方式表示,那么会浪费很大的空间,因为大部分矩阵中的点的值都为0,因此可以采用一个一维数组表示n列,然后每一列采用一个链表的形式来表示,这样会节省很大的空间。

#include    
#define MaxSize 100   
typedef int DataType;  
  
typedef struct {  
    DataType    v;  
    int         i, j;  
}TriTupleNode;  
  
typedef struct {  
    TriTupleNode    data[MaxSize];  //三元组数组   
    int m, n, t;    //行数 列数以及非零元个数   
}TriTupleTable;  
  
  
void CreateTriTupleTable(TriTupleTable *T)  
{  
    //int m, n, t;   
    int i;  
    printf("输入行数,列数以及非零元的个数:");  
    scanf("%d%d%d", &T->m, &T->n, &T->t);  
      
    for (i=1; i<=T->t; ++i)  
    {  
        printf("请输入第%d个顶点的行号列号以及值", i);  
        scanf("%d%d%d", &T->data[i].i, &T->data[i].j, &T->data[i].v);  
    }  
}  
  
void Traverse(TriTupleTable *T)  
{  
    int i;  
    printf("%d  %d  %d\n", T->m, T->n, T->t);  
  
    for (i=1;  i<=T->t; ++i)  
    {  
        printf("%d  %d  %d\n", T->data[i].i, T->data[i].j, T->data[i].v);  
    }  
}  
  
void TransMatrix(TriTupleTable *A, TriTupleTable*B)  
{  
    int p, q, col;  
    B->m = A->n;  
    B->n = A->m;  
    B->t = A->t;  
    if (0 == B->t)  
        return ;  
    q = 0;  
    for (col=0; coln; ++col)  
        for (p=0; pt; ++p)  
        {  
            if (A->data[p].j == col)  
            {  
                B->data[q].i = A->data[p].j;  
                B->data[q].j = A->data[p].i;  
                B->data[q].v = A->data[p].v;  
                ++q;  
            }  
        }  
}  
int main(void)  
{  
    TriTupleTable A, B;  
    CreateTriTupleTable(&A);  
    Traverse(&A);  
    TransMatrix(&A, &B);  
    Traverse(&B);  
    return 0;  
}  

 

2,通过bitmap的方式
 

你可能感兴趣的:(数据结构)