📄 sy4_2.c
字号:
/* sy4_2.c * /
#include"sj.h"
typedef struct QLNode
{ int i,j;
int e;
struct QLNode *right,*down;
}QLNode; /*定义结点,包括行、列、值以及两个指针*/
typedef struct
{ QLNode *rhead[MAXSIZE+1],*chead[MAXSIZE+1];
int mu,nu,tu;
}CrossList; /*定义十字链表*/
void CreateSMatrix_OL(CrossList *M) /*创建矩阵的十字链表存储*/
{
QLNode *p,*q;
int m,n,t,k,i,j,kk,e;
printf("输入矩阵的行列非零元素的个数mu,nu,tu\n");
scanf("%d,%d,%d",&m,&n,&t);
M->mu=m; M->nu=n;M->tu=t;
for(k=1;k<=m;k++)
M->rhead[k]=NULL;
for(k=1;k<=n;k++)
M->chead[k]=NULL;
for (kk=1;kk<=M->tu;kk++)
{ printf("请输入i,j,v:");
scanf("%d,%d,%d",&i,&j,&e); /*输入矩阵的值*/
p=(QLNode* )malloc(sizeof(QLNode)); /*创建十字链表*/
p->i=i;p->j=j;p->e=e;
p->right=p->down=NULL;
if(M->rhead[i]==NULL) M->rhead[i]=p;
else{
q=M->rhead[i];
while((q->right!=NULL)&&(q->right->j<j))
q=q->right;
p->right=q->right;q->right=p;
}/* else */
if(M->chead[j]==NULL) M->chead[j]=p;
else{
q=M->chead[j];
while((q->down)&&(q->down->i<i))
q=q->down;
p->down=q->down;q->down=p;
}/* else */
}/*for*/
}/* CreateSMatrix_OL*/
void printCR1(CrossList *M) { /*行优先方式输出*/
int i; QLNode *p;
for(i=1;i<=M->mu;i++)
{
p=M->rhead[i];
while(p!=NULL) /*输出矩阵的值*/
{ printf(" %d %d %d",p->i,p->j,p->e);
p=p->right; }
printf(" NULL\n");
}
}/* printCR1*/
void printCR2(CrossList *M) { /*列优先方式输出*/
int i; QLNode *p;
for(i=1;i<=M->nu;i++)
{
p=M->chead[i];
while(p!=NULL) /*输出矩阵的值*/
{ printf(" %d %d %d",p->i,p->j,p->e);
p=p->down; }
printf(" NULL\n");
}
}/* printCR2*/
void main()
{ CrossList *M=(CrossList*)malloc(sizeof(CrossList));
int i;
QLNode *p;
CreateSMatrix_OL(M);
printf("行优先输出:\n");
printCR1(M);
printf("列优先输出:\n");
printCR2(M);
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -