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

来源:互联网 发布:qq飞车改装数据最高 编辑:程序博客网 时间:2024/05/17 17:54

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

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

#include <stdio.h>   #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; col<A->n; ++col)          for (p=0; p<A->t; ++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的方式
 

0 0