📄 smatrix_ol.h
字号:
typedef enum{ERROR,OK} Status;
typedef struct OLNode{
int i,j;
float e;
struct OLNode *right,*down;
}OLNode,*OLink;
typedef struct{
OLink *rhead,*chead;
int mu,nu,tu;
}CrossList;
Status CreatSMatrix_OL(CrossList &M)
{
int m,n,t,i,j;
float e;
OLink p,q;
printf("Input Row,Col and element number(3 3 4):");
fflush(stdin);
scanf("%d %d %d",&m,&n,&t);
M.mu=m;M.nu=n;M.tu=t;
if(!(M.rhead=(OLink*)malloc((m+1)*sizeof(OLink)))) return ERROR;
if(!(M.chead=(OLink*)malloc((n+1)*sizeof(OLink)))) return ERROR;
for(i=1;i<=M.mu;i++)
M.rhead[i]=NULL;
for(j=1;j<=M.nu;j++)
M.chead[j]=NULL;
printf("input elemetn(i j e),end of(0 0 0)\n");
fflush(stdin);
scanf("%d %d %f",&i,&j,&e);
if(i>M.mu||j>M.nu) {printf("index overflow!\n");return ERROR;}
while(i!=0)
{
if(!(p=(OLNode *)malloc(sizeof(OLNode)))) return ERROR;
p->i=i;p->j=j;p->e=e;
if(M.rhead[i]==NULL||M.rhead[i]->j>j)
{
p->right=M.rhead[i];
M.rhead[i]=p;
}
else
{
for(q=M.rhead[i];(q->right)&&q->right->j<j;q=q->right)
;
p->right=q->right;
q->right=p;
}
if(M.chead[j]==NULL||M.chead[j]->i>i)
{
p->down=M.chead[j];
M.chead[j]=p;
}
else
{
for(q=M.chead[j];(q->down)&&q->down->i<i;q=q->down)
;
p->down=q->down;
q->down=p;
}
fflush(stdin);
scanf("%d %d %f",&i,&j,&e);
if(i>M.mu||j>M.nu) {printf("index overflow!\n");return ERROR;}
}//while i
return OK;
}
Status InsertNode_OL(CrossList &M,OLink t)
{
OLink p1,p2,pre1,pre2;
int i,j;
i=t->i;j=t->j;
if(M.rhead[i]==NULL||M.rhead[i]->j>j)
{
t->right=M.rhead[i];
M.rhead[i]=t;
}
else
{
for(pre1=p1=M.rhead[i];(p1->right)&&p1->right->j<=j;)
{
pre1=p1;
p1=p1->right;
}
if(p1->j==j&&p1->i==i)
{
t->right=p1->right;
pre1->right=t;
}
else
{
t->right=p1->right;
p1->right=t;
}
}
if(M.chead[j]==NULL||M.chead[j]->i>i)
{
t->down=M.chead[j];
M.chead[j]=t;
}
else
{
for(pre2=p2=M.chead[j];(p2->down)&&p2->down->i<=i;)
{
pre2=p2;
p2=p2->down;
}
if(p2->j==j&&p2->i==i)
{
t->down=p2->down;
pre2->down=t;
}
else
{
t->down=p2->down;
p2->down=t;
}
}
M.tu++;
return OK;
}
Status PrintSMatrix_OL(CrossList M)
{
OLink p;
int i,j;
for(i=1;i<=M.mu;i++)
{
p=M.rhead[i];
for(j=1;j<=M.nu;j++)
{
if(p!=NULL&&p->j==j)
{
printf("%-.2f ",p->e);
p=p->right;
}
else
printf("0.00 ");
}//for j
printf("\n");
}//for i
return OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -