稀疏矩阵(十字链表法)

十字链表法的创建:

 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 }

 

posted @ 2014-04-07 17:16  _level_  阅读(1238)  评论(0编辑  收藏  举报