十字链表法的创建:
1 typedef struct OLNode 2 { 3 int row,col; 4 int value; 5 struct LONode *right,*down; 6 }OLNode,*OLink; 7 8 typedef struct 9 { 10 OLink *row_head,*col_head; 11 int m,n,len; 12 }CrossList; 13 14 void CreatCrossList(CrossList *M) 15 { 16 int m,n,t; 17 scanf("%d,%d,%d",&m,&n,&t); //输入稀疏矩阵的行数m,列数n,非零元素t个。 18 M->m = m; 19 M->n = n; 20 m->len = t; 21 M->row_head = (OLink *)malloc((m+1)sizeof(OLink)); 22 M->col_head = (OLink *)malloc((n+1)sizeof(OLink)); 23 if(M->row_head == NULL||M->col_head == NULL) exit(0); //容错处理 24 M->row_head[] = M->col_head = NULL; 25 26 OLink *q = (OLink *)malloc(sizeof(OLNode)); 27 28 int i,j,k; 29 for(scanf("%d,%d,%d",&i,&j,&k);i != 0;i++) 30 { 31 OLNode *p = (OLNode *)malloc(sizeof(OLNode)); 32 p->row = i; 33 p->col = j; 34 p->value = k; 35 if(M->row_head[i] == NULL) M->row_head[i] = p; //行插入 36 else 37 { 38 39 for(q = M->row_head[i];q->right&&q->right->col < j;q = q->right) ;//空循环体 40 41 p->right = q->right; 42 q->right = p; 43 } 44 45 if(M->col_head[j] == NULL) M->col_head [j] = p; //列输入 46 else 47 { 48 for(q = M->col_head[j];q->down&&q->down->row < i;q = q->down) ;//空循环体 49 50 p->down = q->down; 51 q->down = p; 52 } 53 } 54 55 }