稀疏矩阵链表存储结构并实现加法问题,求助!!!!
#include<iostream>#include<vector>
#define M 100
using namespace std;
struct Node
{
int col,val;
struct Node *next;
};
typedef Node *node;
vector<node> Input(int r,int c)
{
node N;
int a[M][M];
int i,j;
for(i=0;i<r;i++)
for(j=0;j<c;j++)
cin>>a[i][j];
/*cout<<"矩阵为:"<<endl;
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}*/
vector<node>v;
node head, p;
for(i=0;i<r;i++)
{
head=(node)malloc(sizeof(Node));
p=head;
for(j=0;j<c;j++)
{
if(a[i][j]!=0)
{
N=(node)malloc(sizeof(Node));
N->col=j;
N->val=a[i][j];
p->next=N;
p=N;
}
}
p->next=NULL;
v.push_back(head);
}
return v;
}
vector<node> Add(vector<node>N1,vector<node>N2,int r,int c)
{
int i,j;
node p,head,p1,p2;
node N;
vector<node>v;
for(i=0;i<N1.size();i++)
{
head=(node)malloc(sizeof(Node));
p=head;
p1=N1[i]->next;
p2=N2[i]->next;
for(j=0;j<c;j++)
{
if(p1->col==j&&p2->col!=j||p2==NULL)
{
N=(node)malloc(sizeof(Node));
N->val=p1->val;
N->col=p1->col;
p->next=N;
p=N;
p1=p1->next;
}
if(p2->col==j&&p2->col!=j||p2==NULL)
{
N=(node)malloc(sizeof(Node));
N->val=p2->val;
N->col=p2->col;
p->next=N;
p=N;
p2=p2->next;
}
if(p1->col==j&&p2->col==j)
{
N=(node)malloc(sizeof(Node));
N->col=p1->col;
N->val=p1->val+p2->val;
p1=p1->next;
p2=p2->next;
p->next=N;
p=N;
}
if(p1==NULL&&p2==NULL)
break;
}
p->next=NULL;
v.push_back(head);
}return v;
}
int Output(vector<node> N3)
{
int i,m,n=0;node p;
for(i=0;i<N3.size();i++)
{
p=N3[i];p=p->next;
while(p!=NULL)
{
for(m=n+1;m<p->col;m++)
cout<<0<<" ";
cout<<p->val<<" ";
n=p->col;
p=p->next;
}
cout<<"\n";
}
return 0;
}
int main()
{
vector<node>N1;
vector<node>N2;
vector<node>N3;
int r;
int c;
node p;
cout<<"请输入矩阵的行列数:";
cin>>r>>c;
cout<<"请输入矩阵1:"<<endl;
N1=Input(r,c);
cout<<"请输入矩阵2:"<<endl;
N2=Input(r,c);
N3=Add(N1,N2,r,c);
Output(N3);
system("pause");
return 0;
}
只有矩阵每行首位和末位不为0的时候才能运行,求大神调试啊