稀疏矩阵的接压缩算法的实现
2009-02-05 22:38
417 查看
稀疏矩阵中存放的有用信息是相当少的,对于那些无用信息,我们可以把他压缩掉,从而可以节省存储空间,有效的利用存储空间。
#include <stdio.h>
//定义三元组,用来存放压缩后的信息
typedef struct tag_Tuple
{
int column; // 有效信息所在的行
int row; // 有效信息所在的列
int value; // 有效信息的值
struct tag_Tuple * next; // 指向下一个三元组
// 初始化三元组
tag_Tuple()
{
column = -1;
row = -1;
value = -1;
next = 0;
}
}Tuple;
// 对稀疏矩阵进行压缩
Tuple * compress(int * array , int column , int row)
{
Tuple * header = new Tuple;
header->column = column;
header->row = row;
for (int i = 0;i < column;i++)
{
for (int j = 0;j < row;j++)
{
if (array[i * row + j] != 0)
{
Tuple * elem = new Tuple;
elem->column = i;
elem->row = j;
elem->value = array[i * row + j];
for (Tuple * p = header;p->next;p = p->next);
p->next = elem;
}
}
}
return header;
}
// 对三元组进行解压缩
void uncompress(int * array , Tuple * tuple)
{
for (int i = 0;i < tuple->column;i++)
{
for (int j = 0;j < tuple->row;j++)
{
array[i * tuple->row + j] = 0;
}
}
for (Tuple * p = tuple->next;p;p = p->next)
{
array[p->column * tuple->row + p->row] = p->value;
}
}
int main(int argc, char* argv[])
{
int a[4][5] = {
{0,0,1,2,0},
{0,0,0,3,0},
{1,0,0,0,0},
{0,0,0,0,0}};
Tuple * tuple = compress(a[0] , 4, 5);
int b[4][5];
uncompress(b[0] , tuple);
for (int i = 0;i < tuple->column;i++)
{
for (int j = 0;j < tuple->row;j++)
{
printf("%d " , b[i][j]);
}
printf("/n");
}
for (Tuple * p = tuple;p;)
{
Tuple * tmp = p;
p = p->next;
delete tmp;
}
return 0;
}
#include <stdio.h>
//定义三元组,用来存放压缩后的信息
typedef struct tag_Tuple
{
int column; // 有效信息所在的行
int row; // 有效信息所在的列
int value; // 有效信息的值
struct tag_Tuple * next; // 指向下一个三元组
// 初始化三元组
tag_Tuple()
{
column = -1;
row = -1;
value = -1;
next = 0;
}
}Tuple;
// 对稀疏矩阵进行压缩
Tuple * compress(int * array , int column , int row)
{
Tuple * header = new Tuple;
header->column = column;
header->row = row;
for (int i = 0;i < column;i++)
{
for (int j = 0;j < row;j++)
{
if (array[i * row + j] != 0)
{
Tuple * elem = new Tuple;
elem->column = i;
elem->row = j;
elem->value = array[i * row + j];
for (Tuple * p = header;p->next;p = p->next);
p->next = elem;
}
}
}
return header;
}
// 对三元组进行解压缩
void uncompress(int * array , Tuple * tuple)
{
for (int i = 0;i < tuple->column;i++)
{
for (int j = 0;j < tuple->row;j++)
{
array[i * tuple->row + j] = 0;
}
}
for (Tuple * p = tuple->next;p;p = p->next)
{
array[p->column * tuple->row + p->row] = p->value;
}
}
int main(int argc, char* argv[])
{
int a[4][5] = {
{0,0,1,2,0},
{0,0,0,3,0},
{1,0,0,0,0},
{0,0,0,0,0}};
Tuple * tuple = compress(a[0] , 4, 5);
int b[4][5];
uncompress(b[0] , tuple);
for (int i = 0;i < tuple->column;i++)
{
for (int j = 0;j < tuple->row;j++)
{
printf("%d " , b[i][j]);
}
printf("/n");
}
for (Tuple * p = tuple;p;)
{
Tuple * tmp = p;
p = p->next;
delete tmp;
}
return 0;
}
相关文章推荐
- 【数据结构与算法】数组应用3:稀疏矩阵压缩(Java实现)
- 三元组实现稀疏矩阵的压缩存储与转置 (Sparse matrix compression storage and transposition base on triple)
- 三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
- 第九周项目3--稀疏矩阵的三元组表示的实现及应用--(1)建立稀疏矩阵三元组表示的算法库
- C++ 实现稀疏矩阵的压缩存储的实例
- 【算法】三项式数据结构压缩稀疏矩阵
- sdut 1592转置矩阵【稀疏矩阵的压缩存储】【快速转置算法】
- 稀疏矩阵【压缩算法】,具体代码没有,只是思想
- 数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法
- 数据结构编程笔记十三:第五章 数组和广义表 稀疏矩阵的压缩存储实现
- C++实现稀疏矩阵的压缩存储
- 稀疏矩阵的三元组表示的实现及应用(2)——采用三元组存储稀疏矩阵,设计两个稀疏矩阵相加的运算算法
- 【代码】稀疏矩阵的压缩存储与转置算法
- Java实现稀疏矩阵的压缩
- 对称矩阵与压缩存储算法(java实现)
- 三元组压缩存储稀疏矩阵的C++类模板实现
- 【数据结构】稀疏矩阵的压缩存储和转置算法(C++代码)
- C语言 稀疏矩阵 压缩 实现
- C++实现稀疏矩阵的压缩存储实例
- 稀疏矩阵的三元组表示的实现及应用(1)——建立稀疏矩阵三元组表示的算法库