[数据结构]如何节省程序空间
2014-07-21 19:49
232 查看
数据结构---如何节省空间
1,稀疏矩阵
稀疏矩阵
定义:对于那些零元素数目远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称为稀疏矩阵(sparse)。
如果矩阵中每一个点都用数组方式表示,那么会浪费很大的空间,因为大部分矩阵中的点的值都为0,因此可以采用一个一维数组表示n列,然后每一列采用一个链表的形式来表示,这样会节省很大的空间。
2,通过bitmap的方式
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的方式
相关文章推荐
- [数据结构]如何节省程序空间
- 如何让程序占用空间达到最小(如果可以的话能把方法都列出来吗?)
- 如何在linux内核中调用用户空间的程序
- Win7系统如何将桌面文件转移到D盘节省C盘空间
- 手游rpg如何有效的节省地图数据的存储空间
- 如何在程序中预留一段固定的虚拟地址空间
- 如何让自己的Asp.Net程序运行在免费的云计算空间OpenShift上面
- 多级页表如何节省进程页表空间
- 如何让算法更节省空间
- 讨教:WINCE 开发中,如何让.net程序及时地释放内存,如何可以节省内存?
- 如何在linux内核中调用用户空间的程序
- 菜鸟自学数据结构系列——(一)如何写出能够在VC下运行的单链表生成程序
- windbg 如何再内核模式调试用户空间的程序
- 如何从内核空间调用用户空间程序
- windbg 如何再内核模式调试用户空间的程序
- Latex中如何去掉作者和日期以节省空间
- 如何在linux内核中调用用户空间的程序
- Windows7备份磁盘空间如何更好的最大限度的节省
- proto如何做到节省空间。