第五章数组和广义表
一、稀疏矩阵
1.题目要求:
矩阵在工程计算上的应用非常广泛。本题目要求对稀疏矩阵完成加法运算。
本题目要求用以下存储方法表示稀疏矩阵,即:以一维数组顺序存放非零元素的行号、列号和数值,行号-1作为结束标志。例如,如图所示的稀疏矩阵A,则存储在一维数组B 中后内容为:
B[0]=0,B[1]=2,B[2]=3,B[3]=4,B[4]=6,B[5]=5,B[6]=3,B[7]=4,B[8]=7,B[9]=5,B[10] =1,B[11]=9,B[12]=-1
0 0 3 0 0 0 0 0
0 0 0 0 0 0 5 0
A= 0 0 0 0 0 0 0 0
0 0 0 0 7 0 0 0
0 0 0 0 0 0 0 0
0 9 0 0 0 0 0 0
假设有两个如上方法存储的稀疏矩阵A和B,它们均为m行n列,分别存放在数组A和B中,要求编写求矩阵加法如C=A+B的算法,C矩阵存放在数组C中。
2.算法分析:
根据设计要求,首先需要解决如何将一个稀疏矩阵对应存储到一个一维数组中,然后再进行矩阵加法时依次扫描矩阵A和B的列值,并以行优先。当行列相同时,将第三个元素值相加的和以及行列号三个元素存入结果数组C.中;不相同时,将A或B的值三个元素直接存入结果数组中。
二、矩阵运算
1.题目要求:
利用C语言实现:
1、矩阵的转置、相加和相乘运算;
2、将稀疏矩阵转换为三元组后实现其转置、查找、相加和相乘运算。
Java语言实现部分见网站。
2.算法分析:
1.矩阵的转置、相加和相乘:
矩阵采用二维数组存储,一个m*n的二维数组a m*n转置,就是将其行、列互换,形成一个n*m的二维数组b n*m。
二维数组的相加运算,是将两个数组对应位置上的元素相加,这要求被加的两个数组维数相同,且每一维中所含的元素数目相同。
一个m*t的二维数组a m*t与一个t*n的数组b t*n相乘后的结果是一个m*n的二维数组c m*n。
2.稀疏矩阵的转换、转置、查找、相加和相乘: