#include<cstdio>
#include<iostream>
using namespace std;
typedef struct Onode
{
int e;
int i,j;
Onode* right;
Onode* down;
}*ONode;
typedef struct Olink
{
Onode** rowhead;
Onode** colhead;
int m;
int n;
int len;
}*OLink;
void init(Olink *M)
{
M->rowhead=M->colhead=NULL;
M->m=M->n=M->len=0;
return ;
}
void create_link(Olink *M)
{
cout<<"构建矩阵:"<<endl;
cout<<"请输入矩阵行数,列数,非0元素个数"<<endl;
cin>>M->m>>M->n>>M->len;
M->rowhead=new ONode [M->m];
M->colhead=new ONode [M->n];
int i,j,k;
for(i=0;i<M->m;i++)
M->rowhead[i]=NULL;
for(j=0;j<M->n;j++)
M->colhead[j]=NULL;
int m,n,e;
ONode p;
for(k=0;k<M->len;k++)
{
p=new Onode;
cout<<"请输入非0元素的行号,列号,元素值:\t";
cin>>p->i>>p->j>>p->e;
if(M->rowhead[p->i]==NULL||p->j<M->rowhead[p->i]->j)
{
p->right=M->rowhead[p->i];
M->rowhead[p->i]=p;
}
else
{
ONode q=M->rowhead[p->i];
while(q->right!=NULL&&q->right->j<p->j)
q=q->right;
p->right=q->right;
q->right=p;
}
if(M->colhead[p->j]==NULL||p->i<M->colhead[p->j]->i)
{
p->down=M->colhead[p->j];
M->colhead[p->j]=p;
}
else
{
ONode q=M->colhead[p->j];
while(q->down!=NULL&&q->down->i<p->i)
q=q->down;
p->down=q->down;
q->down=p;
}
}
}
void printMatrix(Olink M)
{
cout<<"打印矩阵:"<<endl;
int i,j;
ONode p;
for(i=0;i<M.m;i++)
{
p=M.rowhead[i];
for(j=0;j<M.n;j++)
{
if(!p||p->j!=j)
printf("%-3d",0);
else
{
printf("%-3d",p->e);
p=p->right;
}
}
printf("\n");
}
}
int main()
{
Olink M;
init(&M);
create_link(&M);
printMatrix(M);
}
十字链表构建矩阵
最新推荐文章于 2023-12-26 15:12:39 发布