1 #include<stdio.h>
 2 typedef struct{
 3     int data;
 4     int col;
 5 }Double;
 6 typedef struct{
 7     Double element[50];
 8     int rowindex[50];
 9     int m,n,length;
10 }DSMatrix;
11 void Create(DSMatrix*D)
12 {
13     int e,t=0,flag;
14     scanf("%d %d",&D->m,&D->n);
15     for(int i=0;i<D->m;i++)
16     {
17         flag=0;
18         for(int j=0;j<D->n;j++)
19         {
20             scanf("%d",&e);
21             if(e)
22             {
23                 if(!flag)
24                 {
25                     D->rowindex[i]=t;
26                     flag=1;
27                 }
28                 D->element[t].data=e;
29                 D->element[t++].col=j; 
30             }    
31         }
32         if(!flag)D->rowindex[i]=-1;
33     }
34     D->length=t;
35 }
36 void Order(DSMatrix*D)
37 {
38     int front=0,index,rear=0;
39     while(front<D->m)
40     {
41         front=rear;//默认第0行有元素 
42         rear++;
43         while(rear<D->m&&D->rowindex[rear]==-1)rear++;//rear存放有元素的下一行的下标 
44         if(!(rear<D->m))D->rowindex[rear]=D->length;//控制下面循环结束的条件 
45         for(index=D->rowindex[front];index<D->rowindex[rear];index++)
46             printf("第%d行第%d列:%d\n",front,D->element[index].col,D->element[index].data);
47     }
48 }
49 int Get(DSMatrix*D,int i,int j)
50 {
51     int index=D->rowindex[i];
52     if(index==-1)return 0;
53     while(D->element[index].col!=j)index++;
54     return D->element[index].data;
55 }
56 int main()
57 {
58     DSMatrix D;
59     int i,j;
60     Create(&D);
61     scanf("%d %d",&i,&j);
62     Order(&D);
63     printf("%d",Get(&D,i,j));
64     return 0;
65 }