复习:数组

数组的数据结构

(1)数组是n个相同类型数据元素构成的有限序列
(2)数组的逻辑表示:A=(a1,a2,a3…,an)
(3)其中ai表示数组中的第i个元素

数组的存储结构

数组的所有元素存储在一块地址连续的内存单元中

数组数据类型的性质

(1)数组的数据元素数目固定,一旦定义,其数据元素数目不再有增减变化
(2)数据中的数据元素都有相同的数据类型
(3)数组中的每个数据元素和一组唯一的下标一一对应

稀疏矩阵

一、稀疏矩阵的定义

对于那些零元素数目远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称为稀疏矩阵(sparse)。
人们无法给出稀疏矩阵的确切定义,一般都只是凭个人的直觉来理解这个概念,即矩阵中非零元素的个数远远小于矩阵元素的总数,并且非零元素没有分布规律。

二、稀疏矩阵的压缩存储

由于稀疏矩阵中非零元素较少,零元素较多,因此可以采用只存储非零元素的方法来进行压缩存储。
由于非零元素分布没有任何规律,所以在进行压缩存储的时侯需要存储非零元素值的同时还要存储非零元素在矩阵中的位置,即非零元素所在的行号和列号,也就是在存储某个元素比如aij的值的同时,还需要存储该元素所在的行号i和它的列号j,这样就构成了一个三元组(i,j,aij)的线性表。三元组可以采用顺序表示方法,也可以采用链式表示方法,这样就产生了对稀疏矩阵的不同压缩存储方式。

稀疏矩阵的压缩存储方法

策略:只存储非零元素
约束:稀疏矩阵中非零元素的分布没有任何规律
方案:存储非零元素,同时存储该非零元素所对应的行下标和列下标
稀疏矩阵中每一个非零元素都由一个三元组(i,j,aij)唯一确定,稀疏矩阵中的所有非零元素构成三元组线性表

稀疏矩阵实现

二维矩阵创建三元组的表示

算法:从行序方式扫描二维矩阵A,将其非零的元素加到三元组t中
void CreateMat(TSMatrix &t,int M,int N,ElemType A[][3])
{
int i,j;
t.rows=M;
t.cols=N;
t.nums=0;
for(i=0;i

//将指定位置的元素值赋予给变量

bool Assign(TSMatrix t,ElemType &x,int i,int j)
{
int k=0;
if(i>=t.rows||j>t.cols)
{
return false; //失败时返回false
}
while(k

//三元组赋值:执行A[i][j]=x

//分类讨论 将0元素修改成非零值 将非零值改成另一个非零值
bool Value(TSMatrix &t,ElemType x,int i,int j)
{
int k=0,k1;
if(i>=t.rows||j>t.cols)
{
return false; //失败时返回false
}
while(k

//输出三元组

void DispMat(TSMatrix t)
{
int i;
if(t.nums<=0)
return;
cout<<”t.rows:”<

//矩阵转置

void TranTat(TSMatrix t,TSMtrix &tb)
{
int p,q=0;
tb.rows=t.cols;
tb.cols=t.rows;
tb.nums=t.nums;
if(t.nums!=0) //存在非零元素时
{
for(int v=0;v

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值