稀疏矩阵类:XL_array.h
#include <iostream>
#include <iomanip>
using namespace std;
template <class T>
struct B
{
int i; /*非零元素行号*/
int j; /*非零元素列号*/
T v; /*非零元素值*/
B<T> *next; /* 指向下一个结点的指针*/
};
template <class T>
class XL_array
{
private:
int mm; /* 稀疏矩阵的行数*/
int nn; /* 稀疏矩阵的列数*/
int tt; /* 稀疏矩阵非零个数*/
B<T> * head; /*三元组链表头指针*/
public:
XL_array()
{
head=NULL;return; /* 三元组链表初始化*/
}
void in_XL_array(); /*以三元组形式从键盘输入稀疏矩阵非零元素*/
void th_XL_array(int,int,T[]); /*由一般稀疏矩阵转换*/
void prt_XL_array(); /*按行输出稀疏矩阵*/
XL_array tran_XL_array(); /*稀疏矩阵转置*/
XL_array operator +(XL_array &); /*稀疏矩阵相加*/
};
//以三元组形式从键盘输入稀疏矩阵非零元素
template<class T>
void XL_array<T>::in_XL_array()
{
int k,m,n;
T d;
B<T> *p,*q;
cout<<"请输入行数 列数 非零元素个数:"<<endl;
cin>>mm>>nn>>tt;
q=NULL;
cout<<"输入行号 列号 非零元素值:"<<endl;
for(k=0;k<tt;k++)
{
cin>>m>>n>>d;
p=new B<T>;
p->i=m-1;
p->j=n-1;
p->v=d;
p->next=NULL;
if(head==NULL)head=p;
els