13 以十字链表为存储结构实现矩阵相加(严 5.27)

题目

description
以十字链表为存储结构,编写程序,将稀疏矩阵 B 加到稀疏矩阵 A 上。
input
第一行输入四个正整数,分别为稀疏矩阵 A 和稀疏矩阵 B 的行数 m、列数 n、稀疏矩阵 A 的非零元素个数 t1 和稀疏矩阵 B 的非零元素个数 t2。接下来的 t1+t2 行三元组表示,其中第一个元素表示非零元素所在的行值,第二个元素表示非零元素所在的列值,第三个元素表示非零元素的值。
output
输出相加后的矩阵三元组。
sample_input
3 4 3 2
1 1 1
1 3 1
2 2 2
1 2 1
2 2 3
sample_output
1 1 1
1 2 1
1 3 1
2 2 5

思路

/*普通结点*/
typedef struct OLNode {
   
	int i, j; //非零元素的行、列下标
	int elem; //非零元素的值
	struct OLNode *right, *down; //非零元素所在行表、列表的后继链域
} OLNode, *OLink;

/*头结点*/
typedef struct {
   
	OLink *row_head, *col_head; //行、列链表的头指针向量
	int m, n, t; //矩阵的行数、列数和非零元素的个数
} CrossList;

创建十字链表

CrossList *M;
M = (CrossList *)malloc(sizeof(CrossList));
M->row_head = M->col_head = NULL;
M->m = m;
M->n = n;
M->t = t;

代码建立的是下图红框圈出来的部分:
在这里插入图片描述
2.

M->row_head = (OLink *)malloc(sizeof(OLink) * (m + 1));
M->col_head = (OLink *)malloc(sizeof(OLink) * (n + 1));
for (int k = 1; k <= m; k++) 
	M->row_head[k] = NULL;
for (int k = 1; k <= n; k++) 
	M->col_head[k] = NULL;

代码建立的是下图部分:
在这里插入图片描述

完整代码

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define MAX 100
using namespace std;

/*普通结点*/
typedef struct OLNode {
   
	
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值