实现稀疏矩阵(采用三元组表示)的基本运算假设nxn的稀疏矩阵A采用三元组表示,设计一个程序exp4-2.cpp,完成如下功能。

(1)生成如下两个稀疏矩阵的三元组a和b a= 1 0 3 0 0 1 0 0 0 0 1 0 0 0 1 1 b= 3 0 0 0 0 4 0 0 0 0 1 0 0 0 2 0

(2)输出a矩阵的三元组 (3)输出b的转置矩阵的三元组 代码如下

//稀疏矩阵的三元组表示-算法

#include

#define M 4

#define N 4

#define MaxSize  100         //矩阵中非零元素最多个数

typedef int ElemType;

typedef struct

{

int r;                    //行号

int c;                    //列号

ElemType d;                //元素值

} TupNode;                    //三元组定义

typedef struct

{

int rows;                //行数

int cols;                //列数

int nums;                //非零元素个数

TupNode data[MaxSize];

} TSMatrix;                    //三元组顺序表

void CreatMat(TSMatrix &t,ElemType A[M][N])  //从一个二维稀疏矩阵创建其三元组表示

{

int i,j;

t.rows=M;t.cols=N;t.nums=0;

for (i=0;i

{

for (j=0;j

if (A[i][j]!=0)     //只存储非零元素

{

t.data[t.nums].r=i;t.data[t.nums].c=j;

t.data[t.nums].d=A[i][j];t.nums++;

}

}

}

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 (kt.data[k].r) k++;                    //查找行

while (kt.data[k].c) k++;//查找列

if (t.data[k].r==i && t.data[k].c==j)    //存在这样的元素

t.data[k].d=x;

else                                    //不存在这样的元素时插入一个元素

{

for (k1=t.nums-1;k1>=k;k1--)

{

t.data[k1+1].r=t.data[k1].r;

t.data[k1+1].c=t.data[k1].c;

t.data[k1+1].d=t.data[k1].d;

}

t.data[k].r=i;t.data[k].c=j;t.data[k].d=x;

t.nums++;

}

return true;                        //成功时返回true

}

bool Assign(TSMatrix t,ElemType &x,int i,int j)  //将指定位置的元素值赋给变量

{

int k=0;

if (i>=t.rows || j>=t.cols)

return false;            //失败时返回false

while (kt.data[k].r) k++;                    //查找行

while (kt.data[k].c) k++;//查找列

if (t.data[k].r==i && t.data[k].c==j)

x=t.data[k].d;

else

x=0;                //在三元组中没有找到表示是零元素

return true;            //成功时返回true

}

void DispMat(TSMatrix t)        //输出三元组

{

int i;

if (t.nums<=0)            //没有非零元素时返回

return;

printf("\t%d\t%d\t%d\n",t.rows,t.cols,t.nums);

printf("\t------------------\n");

for (i=0;i

printf("\t%d\t%d\t%d\n",t.data[i].r,t.data[i].c,t.data[i].d);

}

void TranTat(TSMatrix t,TSMatrix &tb)        //矩阵转置

{

int p,q=0,v;                    //q为tb.data的下标

tb.rows=t.cols;tb.cols=t.rows;tb.nums=t.nums;

if (t.nums!=0)                    //当存在非零元素时执行转置

{

for (v=0;v

for (p=0;p

if (t.data[p].c==v)

{

tb.data[q].r=t.data[p].c;

tb.data[q].c=t.data[p].r;

tb.data[q].d=t.data[p].d;

q++;

}

}

}

int main()

{

ElemType A[4][4]={

{1,0,3,0},

{0,1,0,0},

{0,0,1,0},

{0,0,1,1}

};

ElemType B[4][4]={

{3,0,0,0},

{0,4,0,0},

{0,0,1,0},

{0,0,0,2}

};

TSMatrix a,b,c;

CreatMat(a,A);

CreatMat(b,B);

printf("三元组a矩阵:\n");

DispMat(a);

printf("输出b的转置三元组\n");

TranTat(b,c);

DispMat(c);

}

java矩阵三元组相减_实现稀疏矩阵(采用三元组表示)的基本运算相关推荐

  1. python数组相减_对Python 中矩阵或者数组相减的法则详解

    对Python 中矩阵或者数组相减的法则详解 最近在做编程练习,发现有些结果的值与答案相差较大,通过分析比较得出结论,大概过程如下: 定义了一个计算损失的函数: def error(yhat,labe ...

  2. java double相减_完美解决java double数相加和相减的方案

    我就废话不多说了,大家还是直接看代码吧~ /** * double的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型 * 整型地方法适合于 ...

  3. java集合的加减_在JAVA中,对List集合的加减操作

    在日常Java开发中,经常会对List集合进行各种各样的操作,这里针对List集合的加减操作做个小的总结:在我看来最常用的有两个,一个是对原List本身有改变,一个是原List本身无改变. 一.对原L ...

  4. trunc怎么进行日期相减_【PL/SQL】 关于日期操作的常见需求

    需求1: 统计一年内所有是星期三的日期.思路: 枚举法,将整年所有日期都罗列出来,然后再用Where条件筛选.Step1: 求出当年的起初日期1/1和最后一天12/31(可省略) SELECT ADD ...

  5. pgsql 两个时间字段相减_如何在Excel做专业的时间序列分析

    一.工具产生背景 在生产中我们常会根据历史数据去预测未来的发展趋势.比如客户投诉量.用户留存率.页面点击率等等. 对于预测功能的需求多但是具备相应能力的分析师却很少.想做出一份精准的预测需要具备很多专 ...

  6. 类型两个数相减_小学数学简便计算12种分类+5种易错类型,打印出来给孩子练习!(可打印!)...

    简便计算对于小学生来说是个难点,也是最容易出现错误的题型. 简便计算题型 1.同种运算想交换律和结合律:交换就是为了结合. 2.有乘有加(或有减)有相同数,要想乘法分配律,无相同数找倍数关系变相同数用 ...

  7. java矩阵连乘算法_使用java写的矩阵乘法实例(Strassen算法)

    Strassen算法于1969年由德国数学家Strassen提出,该方法引入七个中间变量,每个中间变量都只需要进行一次乘法运算.而朴素算法却需要进行8次乘法运算. 原理 Strassen算法的原理如下 ...

  8. 中两个查询结果相减_位移差?应力差?利用fish语言实现结果文件间运算。

    重要通知:本公众号已开通赞赏功能,各位读者老爷有钱的可以给呱太捧个钱场!推荐使用微信PC端进行阅读,以避免命令流显示畸变.文章所附命令流均可直接复制到FLAC3D 6.0中运行,若有报错,请手动重输命 ...

  9. trunc怎么进行日期相减_三年级数学日期计算方法全在这里了,不分版本,孩子预习用得上...

    小学数学三年级下册学习了年月日,很多孩子最迷惑的不是区分大月和小月,不是判断平年和闰年,不是计算开始时间.经过时间和结束时间,而是计算日期间隔时怎么区分两头都算.算头不算尾.算尾不算头,怎么记忆每种算 ...

最新文章

  1. Dev-C++安装和使用教程(手把手傻瓜式教学)
  2. R语言switch语句语法、实战:Switch语句用来处理嵌套的if else处理起来比较困难或者麻烦的条件判断问题
  3. Flutter初体验(二)—— 创建第一个Flutter APP
  4. 视图解析jstlView支持便捷的国际化功能
  5. ROBOMASTER 2018机甲大师赛 南部赛区三等奖!
  6. window 之命令行的cd
  7. 网站底部运行时间的php代码,网站底部运行时间统计代码
  8. 混合云发展之路:前景广阔,巨头混战
  9. Java基础篇3——流程控制
  10. php一对一模型关联,通过实例学习Laravel模型中的一对一关联关系
  11. cookie 保存导航菜单的展开状态
  12. js关于子元素不触发父元素事件的若干方法
  13. 关于AIR 应用程序沙箱
  14. 旋转矩阵之到底顺时针还是逆时针
  15. 什么是大型机和小型机
  16. 撤回的微信消息腾讯服务器有记录吗,教你如何查看对方已经撤回的微信消息
  17. php小程序中的页面如何换行,解决微信小程序scroll-view换行问题
  18. hp服务器装系统键盘没反应,u盘装系统f12没反应怎么回事|u盘装系统按f12没反应怎么解决...
  19. check the manual that corresponds to your MySQL server
  20. Liferay使用管理中的一些常见问题

热门文章

  1. Windows 7 shortcut icons missing (快捷方式图标丢失)
  2. [BUAA软工]提问回顾与个人总结
  3. CF809C(找规律+数位DP)
  4. mysql与Json学习总结
  5. HBase解决海量图片存储方案
  6. JS实现图片的不间断连续滚动
  7. R语言:怎么进行异常检测
  8. 函数进阶学习之二 声明 定义
  9. Javaweb监听器(2)
  10. vsftpd配置文件详解[转载]