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

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

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. #include <stdio.h>     
  2. #define MaxSize 100     
  3. typedef int DataType;    
  4.     
  5. typedef struct {    
  6.     DataType    v;    
  7.     int         i, j;    
  8. }TriTupleNode;    
  9.     
  10. typedef struct {    
  11.     TriTupleNode    data[MaxSize];  //三元组数组     
  12.     int m, n, t;    //行数 列数以及非零元个数     
  13. }TriTupleTable;    
  14.     
  15.     
  16. void CreateTriTupleTable(TriTupleTable *T)    
  17. {    
  18.     //int m, n, t;     
  19.     int i;    
  20.     printf("输入行数,列数以及非零元的个数:");    
  21.     scanf("%d%d%d", &T->m, &T->n, &T->t);    
  22.         
  23.     for (i=1; i<=T->t; ++i)    
  24.     {    
  25.         printf("请输入第%d个顶点的行号列号以及值", i);    
  26.         scanf("%d%d%d", &T->data[i].i, &T->data[i].j, &T->data[i].v);    
  27.     }    
  28. }    
  29.     
  30. void Traverse(TriTupleTable *T)    
  31. {    
  32.     int i;    
  33.     printf("%d  %d  %d\n", T->m, T->n, T->t);    
  34.     
  35.     for (i=1;  i<=T->t; ++i)    
  36.     {    
  37.         printf("%d  %d  %d\n", T->data[i].i, T->data[i].j, T->data[i].v);    
  38.     }    
  39. }    
  40.     
  41. void TransMatrix(TriTupleTable *A, TriTupleTable*B)    
  42. {    
  43.     int p, q, col;    
  44.     B->m = A->n;    
  45.     B->n = A->m;    
  46.     B->t = A->t;    
  47.     if (0 == B->t)    
  48.         return ;    
  49.     q = 0;    
  50.     for (col=0; col<A->n; ++col)    
  51.         for (p=0; p<A->t; ++p)    
  52.         {    
  53.             if (A->data[p].j == col)    
  54.             {    
  55.                 B->data[q].i = A->data[p].j;    
  56.                 B->data[q].j = A->data[p].i;    
  57.                 B->data[q].v = A->data[p].v;    
  58.                 ++q;    
  59.             }    
  60.         }    
  61. }    
  62. int main(void)    
  63. {    
  64.     TriTupleTable A, B;    
  65.     CreateTriTupleTable(&A);    
  66.     Traverse(&A);    
  67.     TransMatrix(&A, &B);    
  68.     Traverse(&B);    
  69.     return 0;    
  70. }    

 

2,通过bitmap的方式
 

posted on 2015-01-20 20:05  知了112  阅读(237)  评论(0编辑  收藏  举报