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 }