十字链表,求修改
写了一段程序,可是怎么也运行不了,求大神指教!要求:数据元素类型ElemType取float。
1)从键盘输入稀疏矩阵的各元素。(行<=5,列<=5)
2)建立稀疏矩阵的十字链表。
3)分别按行、列输出链表中各元素的数据域。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
struct OLNode
{
int i,j;
float v;
struct OLNode *right;
struct OLNode *down;
};
struct OLNode *matrix_to_OLN(int m, int n, float a[])
{ int p,q,tt=0,mm,nn;
mm=m;
nn=n;
float d;
struct OLNode *H,*s,*k;
if(mm>=nn)
q=mm;
else q=nn;
H=(OLNode*)malloc(sizeof(OLNode));
for(p=0;p<q;p++)
{
H[p].i=-1;
H[p].j=-1;
H[p].down=&H[p];
H[p].right=&H[p];
}
for (p=0;p<m;p++)
for (q=0;q<n;q++)
{
d=a[p*n+q];
if(d!=0)
{
s=(OLNode*)malloc(sizeof(OLNode));
s->i=p;
s->j=q;
s->v=d;
k=&H[p];
while(k->right!=&H[p])
{ k=k->right;
k->right=s;
s->right=&H[p];
k=&H[q];
}
while(k->down!=&H[q])
k=k->down;
k->down=s;
s->down=&H[q];
tt=tt+1;
}
}
return H;
}
void put_Array1(struct OLNode *H,int m,int n)
{
OLNode *r;
int b,bb;
printf("按行输入:");
for(b=0;b<m;b++)
{
r=&H[b];
r=r->right;
for(bb=0;bb<n;bb++)
{
if(r->j==bb)
{
printf("\t行=%d 列=%d 值=%f",r->i,r->j,r->v);
r=r->right;
}
printf("\n");
}
}
}
void put_Array2(struct OLNode *H,int m,int n)
{
OLNode *r;
int b,bb;
printf("按列输入:");
for(b=0;b<n;b++)
{
r=&H[b];
r=r->down;
for(bb=0;bb<m;bb++)
{
if(r->i==bb)
{
printf("\t行=%d 列=%d 值=%f",r->i,r->j,r->v);
r=r->down;
}
printf("\n");
}
}
}
void main()
{
int m,n,t,i;
float a[25];
struct OLNode *H;
printf("输入行、列,非零元素个数(m,n,t数字间用逗号分隔)");
scanf("%d,%d,%d",&m,&n,&t);//输入行、列,非零元素个数
if(m>5||n>5)
printf("error");
else
{ printf("输入矩阵元素(数字间用逗号分隔)");
for(i=0;i<m*n;i++)
{
printf("a[%d]=",i);
scanf("%f",&a[i]);
}
H=matrix_to_OLN(m,n,a);
put_Array1(H,m,n);
put_Array2(H,m,n);
}
}
[ 本帖最后由 qixing232325 于 2013-10-11 22:33 编辑 ]