sparsematadd.c
113 linesc
DOWNLOAD
1// Aim: Program to perform Sparse Matrix Addition.
2#include<stdio.h>
3
4void display(int x[10][3]){
5    int i,j;
6    printf("Sparse matrix representation\n");
7    for(i=0;i<=x[0][2];i++){
8        for(j=0;j<3;j++){
9            printf("%d  \t",x[i][j]);
10        }
11        printf("\n");
12    }
13}
14
15void read(int a[10][10], int s[10][3], int m, int n){
16    int i,j,k=1;
17    s[0][0]=m;
18    s[0][1]=n;
19    for(i=0;i<m;i++){
20        for(j=0;j<n;j++){
21            if(a[i][j]!=0){
22                s[k][0]=i;
23                s[k][1]=j;
24                s[k][2]=a[i][j];
25                k++;
26            }
27        }
28    }
29    s[0][2] = k - 1; 
30}
31
32void add(int a[10][3], int b[10][3], int s[10][3]){
33    int i=1,j=1,k=1;
34    if(a[0][0]!=b[0][0] || a[0][1]!=b[0][1]){
35        printf("Matrix size mismatch\n");
36        return;
37    }
38    s[0][0] = a[0][0];
39    s[0][1] = a[0][1];
40    while(i <= a[0][2] && j <= b[0][2]){
41        if(a[i][0] < b[j][0] || (a[i][0] == b[j][0] && a[i][1] < b[j][1])){
42            s[k][0] = a[i][0];
43            s[k][1] = a[i][1];
44            s[k][2] = a[i][2];
45            i++;
46        } else if(a[i][0] > b[j][0] || (a[i][0] == b[j][0] && a[i][1] > b[j][1])){
47            s[k][0] = b[j][0];
48            s[k][1] = b[j][1];
49            s[k][2] = b[j][2];
50            j++;
51        } else {
52            s[k][0] = a[i][0];
53            s[k][1] = a[i][1];
54            s[k][2] = a[i][2] + b[j][2];
55            i++;
56            j++;
57        }
58        k++;
59    }
60    while(i <= a[0][2]){
61        s[k][0] = a[i][0];
62        s[k][1] = a[i][1];
63        s[k][2] = a[i][2];
64        i++;
65        k++;
66    }
67    while(j <= b[0][2]){
68        s[k][0] = b[j][0];
69        s[k][1] = b[j][1];
70        s[k][2] = b[j][2];
71        j++;
72        k++;
73    }
74    s[0][2] = k - 1; // Number of non-zero elements
75}
76
77int main(){
78    int a[10][10], b[10][10], s1[10][3], s2[10][3], sum[10][3];
79    int m, n, i, j;
80
81    printf("Enter the number of rows and columns of the matrices: ");
82    scanf("%d %d", &m, &n);
83
84    printf("Enter the elements of the first matrix:\n");
85    for(i=0; i<m; i++){
86        for(j=0; j<n; j++){
87            scanf("%d", &a[i][j]);
88        }
89    }
90
91    printf("Enter the elements of the second matrix:\n");
92    for(i=0; i<m; i++){
93        for(j=0; j<n; j++){
94            scanf("%d", &b[i][j]);
95        }
96    }
97
98    read(a, s1, m, n);
99    read(b, s2, m, n);
100
101    add(s1, s2, sum);
102
103    printf("First matrix in sparse form:\n");
104    display(s1);
105
106    printf("Second matrix in sparse form:\n");
107    display(s2);
108
109    printf("Sum of matrices in sparse form:\n");
110    display(sum);
111
112    return 0;
113}