被这个稀疏矩阵折磨了很久,看了将近一个半礼拜,看的我很想撕书。
这个是程序思想是和数据结构(c语言版)机械工业出版社的学习的,书 代码讲解不是很详细,搜了网上很多代码,都是抄了一下,草草注释,在我自己写的时候发现书上的代码是有问题的。
书上p48,new_b使用int类型,但是转置是term类型,而且转置都是用了一位数组。
还有就是书上的边界条件处理的是有问题的,如果原封不动的写,最后结果会是两行叠加的答案,我写了两种方法
书上显然是错的,查了很多中文版本,代码都是错的,没有查到英文版,不知道是什么状况,有哪位看到英文版的代码,请给我发一下原版,不胜感激!!!
都说国外书很好,但是我觉得还是自己多动手,不能光看,尽信书不如无书,这个题也警示我要多动手!!!
大家只要耐心的看程序下面的图就可以大概了解过程,过程图是我自己画的,画的不是太好,如果大家觉得这篇博客可以帮到你,大家可以随意转载,能帮到大家非常开心,写的不对的地方希望大家提出来,希望和大家一起进步!!!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_TERMS 101
#define MAX_COL 50
typedef struct{
int col;
int row;
int value;
}term;
term a[MAX_TERMS];
term b[MAX_TERMS];
term d[MAX_TERMS];
void fast_transpose(term a[],term b[]);
void mmult(term a[],term b[],term d[]);
int compare(int a,int b);
void storesum(term d[],int *totald,int row,int column,int *sum);
int main()
{
int value;
int count = 1;
printf("请输入将要输入a矩阵的行和列数\n");
scanf("%d%d",&a[0].row,&a[0].col);
printf("请输入数据\n");
for(int i = 1;i <= a[0].row;i++)
for(