您的位置:首页 > 理论基础 > 数据结构算法

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

2014-07-21 19:49 232 查看
数据结构---如何节省空间

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的方式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: