这是我参与更文挑战的第14天,活动详情查看:更文挑战
栈和队列的应用
栈
- 括号匹配
- 表达式求值
- 递归
队列
- 层次遍历 (bfs)
特殊矩阵的压缩存储
存储计算
- 一维数组
- 二维数组
矩阵的压缩
对称矩阵
三角矩阵
三对角矩阵
对角矩阵又名带状矩阵[三个像对角线一样]
- k=2i+j-3
- i = |(k+1)/3 +1|
- j = k-2i+3
稀疏矩阵
对于在实际问题中出现的大型的稀疏矩阵,若用常规分配方法在计算机中储存,将会产生大量的内存浪费,而且在访问和操作的时候也会造成大量时间上的浪费,为了解决这一问题,从而产生了多种解决方案。
由于其自身的稀疏特性,通过压缩可以大大节省稀疏矩阵的内存代价。具体操作是:将非零元素所在的行、列以及它的值构成一个三元组(i,j,v),然后再按某种规律存储这些三元组,这种方法可以节约存储空间。
#define SMAX 1000
typedef struct
{
int i,j; //储存非零元素的行和列信息
ElementType e; //非零元素的值
} Triple; //定义三元组类型
typedef struct
{
int mu,nu,tu; //矩阵的行、列和非零元素的个数
Triple data[SMAX]; //三元组表
} TSMatrix;
举个栗子
那么对于一个简单的矩阵转置,如何使用三元组的情况下实现呢?
先将表示行列的val值互换,再对其进行重新排序即可。