描述:

输入两个稀疏矩阵A和B,用十字链表实现A=A+B,输出它们相加的结果。

输入:

第一行输入四个正整数,分别是两个矩阵的行m、列n、第一个矩阵的非零元素的个数t1和第二个矩阵的非零元素的个数t2,接下来的t1+t2行是三元组,分别是第一个矩阵的数据和第二个矩阵的数据, 三元组的第一个元素表示行,第二个元素表示列,第三个元素是该元素的值。

输出:

输出相加后的矩阵三元组。

输入样例:

3 4 3 2
1 1 1
1 3 1
2 2 2
1 2 1
2 2 3

输出样例:

1 1 1
1 2 1
1 3 1
2 2 5
#include <stdio.h>
#include<stdlib.h>typedef struct OLNODE
{int row,col;int data;struct OLNODE *right,*down;
} NODE,*LNODE;typedef struct CORSS
{LNODE *rh,*ch;int ra,ca,da;
} CROSS, *LCROSS;void Create(LCROSS A);void PlusToA(LCROSS A,LCROSS B);void PrintCross(LCROSS A);int main()
{LCROSS A = (LCROSS)malloc(sizeof(CROSS));LCROSS B = (LCROSS)malloc(sizeof(CROSS));scanf("%d %d %d %d",&A->ra,&A->ca,&A->da,&B->da);B->ra = A->ra;B->ca = A->ca;Create(A);Create(B);//" 3  4 0 5  创建时B有问题"PlusToA(A,B);PrintCross(A);return 0;
}void Create(LCROSS M)
{int i;LNODE p,temp;M->rh = (LNODE *)malloc((M->ra+1)*sizeof(LNODE));M->ch = (LNODE *)malloc((M->ca+1)*sizeof(LNODE));for(i=1; i<=M->ra; i++){M->rh[i]=NULL;}/*for(i=1; i<=M->ca; i++){M->ch[i]=NULL;}*/if(M->da != 0){for(i=1; i<=M->da; i++){p=(LNODE)malloc(sizeof(NODE));scanf("%d %d %d",&p->row,&p->col,&p->data);if(M->rh[p->row] == NULL){p->right=NULL;M->rh[p->row] = p;}else{for(temp=M->rh[p->row];; temp=temp->right){if(temp->right == NULL){temp->right = p;p->right =NULL;break;}else if(temp->col < p->col && temp->right->col>p->col){p->right = temp->right;temp->right = p;break;}else if(temp==M->rh[p->row] && temp->col>p->col){p->right = temp;temp=p;break;}}}/*         if(M->ch[p->col] == NULL|| M->ch[p->col]->row>(p->row)){p->down=M->ch[p->col];M->ch[p->col] = p;}else{for(temp=M->ch[p->col]; temp->down && temp->down->row<p->row; temp=temp->down);p->down = temp->down;temp->down = p;}*/}}}void PlusToA(LCROSS A,LCROSS B)
{int i;LNODE p,temp1,temp2;for(i=1; i<=A->ra; i++){if(B->rh[i] == NULL) continue;else{if(A->rh[i] == NULL){p=(LNODE)malloc(sizeof(NODE));p->col = B->rh[i]->col;p->row = B->rh[i]->row;p->data = B->rh[i]->data;A->rh[i]=p;p->right = NULL;B->rh[i]=B->rh[i]->right;}if(B->rh[i]==NULL)continue;for(temp1=B->rh[i];; temp1=temp1->right){for(temp2=A->rh[i];; temp2=temp2->right){if(temp2->col == temp1->col){temp2->data+=temp1->data;break;}else if(temp2==A->rh[i] && temp1->col<temp2->col){p=(LNODE)malloc(sizeof(NODE));p->col = temp1->col;p->row = temp1->row;p->data = temp1->data;p->right = temp2->right;p->right =temp2;A->rh[i]=p;break;}else if((temp2->right == NULL || temp2->right->col>temp1->col)  && temp1->col>temp2->col){p=(LNODE)malloc(sizeof(NODE));p->col = temp1->col;p->row = temp1->row;p->data = temp1->data;p->right = temp2->right;temp2->right=p;break;}}if(temp1->right == NULL) break;}}}}void PrintCross(LCROSS A)
{int i;LNODE p;for(i=1; i<=A->ra; i++){p=A->rh[i];while(p!=NULL){printf("%d %d %d\n",p->row,p->col,p->data);p=p->right;}}
}

TIP:

1、仅使用了十字链表中的行链表,列链表被注释掉了,因为本题中没用。

2、注意修改链表时一定要修改原链表变量!!

如,定义链表A,temp=A,修改temp=p不能达到修改链表A=p的目的。

稀疏矩阵的加法(用十字链表实现A=A+B)相关推荐

  1. 稀疏矩阵的压缩存储--十字链表(转载)

    稀疏矩阵的压缩存储--十字链表(转载)<?xml version="1.0" encoding="UTF-8"?> 来自为知笔记(Wiz) 转载于: ...

  2. 数据结构java稀疏矩阵_数据结构之十字链表——稀疏矩阵的链式存储及加法运算...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 以下简单实现了数据结构中的十字链表(Java实现):代码为添加(add)方法及求和(sum)方法,其它方法后续有时间再添加,最下面有测试方法 CrossL ...

  3. 电力系统:节点导纳矩阵的稀疏存储(稀疏矩阵)——C语言十字链表实现

    最近学习电力系统分析这门专业课,发现计算机分析在这门课上非常重要. 大电网的等值电路参数计算.导纳矩阵存储.潮流计算等都需要在电脑上编程实现. 打算试试用拿手的纯C来实现导纳矩阵的存储,也就是实现一个 ...

  4. 稀疏矩阵——实现三元组,十字链表下的稀疏矩阵的加、转、乘的

    稀疏矩阵应用: 实现三元组,十字链表下的稀疏矩阵的加.转.乘. 代码: #include<iostream> using namespace std; typedef int ElemTy ...

  5. 5.3稀疏矩阵的十字链表存储

    十字链表产生原因:当矩阵的非零元个数和位置在操作过程中变化较大时,就不宜采用顺序存储结构来表示三元组的线性表. 十字链表特点: 每一个非零元开用含5个域的结点表示,其中i.j和e这3个域分别表示该非零 ...

  6. 特殊矩阵的压缩存储(详细版 通俗易懂 含c语言稀疏矩阵十字链表代码 )

    前言 此文章是本人第一篇博客,目的在于巩固过去所学的知识,同时可能会给大家带来一丝丝帮助,但由于没有经验加上本人能力极其有限,文章中可能存在不足之处,还请读者能够指正(`・ω・´). 这篇文章首先会介 ...

  7. noj数据结构稀疏矩阵的加法十字链表_数据结构学习(C )稀疏矩阵(十字链表1)

    CSDN 先说说什么叫稀疏矩阵. 你说, 这个问题很简单吗, 那你一定不知道中国学术界的嘴皮子仗, 对一个字眼的"抠"将会导致两种相反的结论.这是清华 2000 年的一道考研题:& ...

  8. 稀疏矩阵十字链表表示

    类型定义 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #define MAX 100 /*稀疏矩 ...

  9. 【swjtu】数据结构实验5_基于十字链表的稀疏矩阵转置

    实验内容及要求: 编写程序,从字符文件读入三个正整数m, n, t以及t个三元组(i, j, e)建立稀疏矩阵的十字链表存储结构.其中,m.n分别表示矩阵行数和列数:i,  j为非零元素行号和列号.编 ...

最新文章

  1. PL/SQL常用方法汇总
  2. 艾伦·图灵破译纳粹密码,被视为计算机和人工智能领域的先驱。
  3. WAS集群系列(2):数据库连接低级错误——网络连接问题
  4. CSS+DIV-制作实用菜单
  5. 自定义Android菜单背景
  6. Python_Note_08Day_10_03_JQuery
  7. 直接定址表03 - 零基础入门学习汇编语言74
  8. Spark详解(一):Spark及其生态圈概述
  9. 杏树林孙文亮:在线医疗数据驱动实战
  10. 研究性论文的图注应该怎么写?
  11. boost::mp11::mp_at相关用法的测试程序
  12. 实验 4 [bx]和 loop 的使用
  13. [android] 练习使用ListView(二)
  14. 人脸识别dlib库 记录
  15. 【转】Log4Net五步走
  16. CentOS 7下Gitlab安装和迁移
  17. python : autopep8
  18. Git报错The requested URL returned error: 403
  19. 实验一 Java编程基础
  20. 蒙特卡洛模拟电动汽车充电matlab,基于蒙特卡洛模拟的电动汽车充电负荷预测

热门文章

  1. 不借助编辑器自带的代码高亮工具(Syntaxhighlighte),生成完美格式的语法高亮代码
  2. C++链接器工具错误:LNK2001, LNK2019
  3. 四个方面讲解MPK(安规电容)与CBB电容的区别
  4. 【Ubuntu】远程软件安装与卸载
  5. Android 打包apk出错问题
  6. Android 系统时间自动更新机制--解决 “时间和日期不准确“
  7. Python爬虫 | 代理IP的获取和使用
  8. 20221125使用PR2023自动识别obs-studio录屏生成的MKV视频的字幕
  9. python 整行_python dataframe 输出结果整行显示的方法
  10. 出现无法访问的故障,ping出现请求超时time out,系目的主机网关造成问题排查过程