题目
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 {