69,371
社区成员
发帖
与我相关
我的任务
分享
/*6.编写一个在十字链表按三元组表的形式打印输出。*/
#include<stdio.h>
#include<stdlib.h>
typedef struct OLNode
{
int row,col;
int value;
struct OLNode *right,*down;
}OLNode,*OLink;
typedef struct
{
OLink row_head,col_head;
int m,n,len;
}CrossList;
void CreateCrossList(CrossList *M)
{
int m,n,t;
printf("请输入稀疏矩阵的行数、列数、非零元素的个数:");
scanf("%d,%d,%d",&m,&n,&t);
M->m=m;
M->n=n;
M->len=t;
if(!(M->row_head=(OLink)malloc((m+1)sizeof(OLNode))))
{
printf("内存空间不足!");
goto end;
}
if(!(M->col_head=(OLink)malloc((n+1)sizeof(OLNode))))
{
printf("内存空间不足!");
goto end;
}
M->row_head[]=M->col_head[]=NULL;
for(scanf("%d,%d,%d",&m,&n,&t);m!=0;scanf("%d,%d,%d",&m,&n,&t))
{
OLink p,q;
if(!(p=(OLink)malloc(sizeof(OLNode))))
{
printf("内存空间不足!");
goto end;
}
p->row=m;p->col=n;p->value=t;
if(M->row_head[n]==NULL) M->row_head[n]=p;
else
{
for(q=M->row_head[n];q->right&&q->right->col<m;q=q->right);
p->right=q->right;
q->right=p;
}
if(M->col_head[m]==NULL) M->col_head[m]=p;
else
{
for(q=M->col_head[m];q->down&&q->down->row<n;q=q->down);
p->down=q->down;
q->down=p;
}
}
end:;
}
void printcrosslist(CrossList a)
{
int b;
OLink c;
printf("行号\t列号\t元素值\n");
for(b=1;b<=a.m;b++)
{
c=a.row_head+b;
while(c!=NULL)
{
printf("%d\t%d\t%d\n",c->row,c->col,c->value);
c=c->right;
}
}
}
int main()
{
CrossList A;
CreateCrossList(&A);
printcrosslist(A);
system("pause");
return 0;
}
/*6.编写一个在十字链表按三元组表的形式打印输出。*/
#include<stdio.h>
#include<stdlib.h>
typedef struct OLNode
{
int row,col;
int value;
struct OLNode *right,*down;
}OLNode,*OLink;
typedef struct
{
OLink *row_head,*col_head;//OLNode 的指针的指针
int m,n,len;
}CrossList;
void CreateCrossList(CrossList *M)
{
int m,n,t,u;
printf("请输入稀疏矩阵的行数、列数、非零元素的个数(格式:m,n,tEnter):");
scanf("%d,%d,%d",&m,&n,&t);
M->m=m;
M->n=n;
M->len=t;
if(!(M->row_head=(OLink *)malloc(m*sizeof(OLink))))//分配m个OLink指针给M->row_head,分别指向行方向上的第一个元素
{
printf("内存空间不足!");
goto end;
}
if(!(M->col_head=(OLink *)malloc(n*sizeof(OLink))))
{
printf("内存空间不足!");
goto end;
}
for(t=0;t<m;t++)//书上写的是M->row_head[]=M->col_head[]=NULL;可是编译通不过
M->row_head[t]=NULL;
for(t=0;t<n;t++)
M->col_head[t]=NULL;
printf("请分别输入稀疏矩阵元素的行号、列号、元素值(格式:m,n,tEnter)\n");
for(u=0;u<M->len;u++)
{
do
{
scanf("%d,%d,%d",&m,&n,&t);
if(m<1||m>M->m||n<1||n>M->n||n==0)
printf("输入错误,请重新输入:");
}while(m<1||m>M->m||n<1||n>M->n||n==0);
OLink p,q;
if(!(p=(OLink)malloc(sizeof(OLNode))))
{
printf("内存空间不足!");
goto end;
}
p->row=m;p->col=n;p->value=t;
p->right=p->down=NULL;
if(M->row_head[m-1]==NULL)
M->row_head[m-1]=p;
else
{
for(q=M->row_head[m-1];q->right&&q->right->col<n;q=q->right);
p->right=q->right;
q->right=p;
}
if(M->col_head[n-1]==NULL)
M->col_head[n-1]=p;
else
{
for(q=M->col_head[n-1];q->down&&q->down->row<m;q=q->down);
p->down=q->down;
q->down=p;
}
}
end:;
}
void printcrosslist(CrossList a)
{
int b;
OLink c;
printf("行号\t列号\t元素值\n");
for(b=0;b<a.m;b++)
{
c=a.row_head[b];
while(c!=NULL)
{
printf("%d\t%d\t%d\n",c->row,c->col,c->value);
c=c->right;
}
}
}
int main()
{
CrossList A;
CreateCrossList(&A);
printcrosslist(A);
system("pause");
return 0;
}
/*6.编写一个在十字链表按三元组表的形式打印输出。*/
#include<stdio.h>
#include<stdlib.h>
typedef struct OLNode
{
int row,col;
int value;
struct OLNode *right,*down;
}OLNode,*OLink;
typedef struct
{
OLink *row_head,*col_head;//OLNode 的指针的指针
int m,n,len;
}CrossList;
void CreateCrossList(CrossList *M)
{
int m,n,t,u;
printf("请输入稀疏矩阵的行数、列数、非零元素的个数(格式:m,n,tEnter):");
scanf("%d,%d,%d",&m,&n,&t);
M->m=m;
M->n=n;
M->len=t;
if(!(M->row_head=(OLink *)malloc(m*sizeof(OLink))))//分配m个OLink指针给M->row_head,分别指向行方向上的第一个元素
{
printf("内存空间不足!");
goto end;
}
if(!(M->col_head=(OLink *)malloc(n*sizeof(OLink))))
{
printf("内存空间不足!");
goto end;
}
for(t=0;t<m;t++)//书上写的是M->row_head[]=M->col_head[]=NULL;可是编译通不过
M->row_head[t]=NULL;
for(t=0;t<n;t++)
M->col_head[t]=NULL;
printf("请分别输入稀疏矩阵元素的行号、列号、元素值(格式:m,n,tEnter)\n");
for(u=0;u<M->len;u++)
{
do
{
scanf("%d,%d,%d",&m,&n,&t);
if(m<1||m>M->m||n<1||n>M->n||n==0)
printf("输入错误,请重新输入:");
}while(m<1||m>M->m||n<1||n>M->n||n==0);
OLink p,q;
if(!(p=(OLink)malloc(sizeof(OLNode))))
{
printf("内存空间不足!");
goto end;
}
p->row=m;p->col=n;p->value=t;
p->right=p->down=NULL;
if(M->row_head[m-1]==NULL)
M->row_head[m-1]=p;
else
{
for(q=M->row_head[m-1];q->right&&q->right->col<n;q=q->right);
p->right=q->right;
q->right=p;
}
if(M->col_head[n-1]==NULL)
M->col_head[n-1]=p;
else
{
for(q=M->col_head[n-1];q->down&&q->down->row<m;q=q->down);
p->down=q->down;
q->down=p;
}
}
end:;
}
void printcrosslist(CrossList a)
{
int b;
OLink c;
printf("行号\t列号\t元素值\n");
for(b=0;b<a.m;b++)
{
c=a.row_head[b];
while(c!=NULL)
{
printf("%d\t%d\t%d\n",c->row,c->col,c->value);
c=c->right;
}
}
}
int main()
{
CrossList A;
CreateCrossList(&A);
printcrosslist(A);
system("pause");
return 0;
}
/*6.编写一个在十字链表按三元组表的形式打印输出。*/
#include<stdio.h>
#include<stdlib.h>
typedef struct OLNode
{
int row,col;
int value;
struct OLNode *right,*down;
}OLNode,*OLink;
typedef struct
{
OLink *row_head,*col_head;
int m,n,len;
}CrossList;
void CreateCrossList(CrossList *M)
{
int m,n,t;
printf("请输入稀疏矩阵的行数、列数、非零元素的个数:");
scanf("%d,%d,%d",&m,&n,&t);
M->m=m;
M->n=n;
M->len=t;
if(!(M->row_head=(OLink *)malloc((m+1)sizeof(OLink))))
{
printf("内存空间不足!");
goto end;
}
if(!(M->col_head=(OLink *)malloc((n+1)sizeof(OLink))))
{
printf("内存空间不足!");
goto end;
}
M->row_head[]=M->col_head[]=NULL;
for(scanf("%d,%d,%d",&m,&n,&t);m!=0;scanf("%d,%d,%d",&m,&n,&t))
{
OLink p,q;
if(!(p=(OLink)malloc(sizeof(OLNode))))
{
printf("内存空间不足!");
goto end;
}
p->row=m;p->col=n;p->value=t;
if(M->row_head[n]==NULL) M->row_head[n]=p;
else
{
for(q=M->row_head[n];q->right&&q->right->col<m;q=q->right);
p->right=q->right;
q->right=p;
}
if(M->col_head[m]==NULL) M->col_head[m]=p;
else
{
for(q=M->col_head[m];q->down&&q->down->row<n;q=q->down);
p->down=q->down;
q->down=p;
}
}
end:;
}
void printcrosslist(CrossList a)
{
int b;
OLink c;
printf("行号\t列号\t元素值\n");
for(b=1;b<=a.m;b++)
{
c=a.row_head[b];
while(c!=NULL)
{
printf("%d\t%d\t%d\n",c->row,c->col,c->value);
c=c->right;
}
}
}
int main()
{
CrossList A;
CreateCrossList(&A);
printcrosslist(A);
system("pause");
return 0;
}
M->row_head[]=M->col_head[]=NULL;
OLink row_head,col_head;
if(!(M->row_head=(OLink)malloc((m+1)sizeof(OLNode))))
M->row_head=(OLink)malloc((m+1)sizeof(OLNode));
if(M->row_head==NULL){
printf("内存空间不足!");
goto end;
}
}