mirror of
https://github.com/Manoj-HV30/ds-lab-codes.git
synced 2026-05-16 19:35:22 +00:00
113 lines
2.4 KiB
C
113 lines
2.4 KiB
C
#include<stdio.h>
|
|
|
|
typedef struct
|
|
{
|
|
int r, c, v;
|
|
} term;
|
|
|
|
/* Simple Transpose Method */
|
|
void simpleTranspose(term a[], term t[])
|
|
{
|
|
int i, j, k = 1;
|
|
int numrows = a[0].r;
|
|
int numcols = a[0].c;
|
|
int numterms = a[0].v;
|
|
|
|
t[0].r = numcols;
|
|
t[0].c = numrows;
|
|
t[0].v = numterms;
|
|
|
|
if (numterms > 0)
|
|
{
|
|
for (i = 0; i < numcols; i++)
|
|
{
|
|
for (j = 1; j <= numterms; j++)
|
|
{
|
|
if (a[j].c == i)
|
|
{
|
|
t[k].r = a[j].c;
|
|
t[k].c = a[j].r;
|
|
t[k].v = a[j].v;
|
|
k++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
printf("\n=== SIMPLE TRANSPOSE RESULT ===\n");
|
|
printf("Row\tCol\tVal\n");
|
|
for (i = 1; i <= t[0].v; i++)
|
|
printf("%d\t%d\t%d\n", t[i].r, t[i].c, t[i].v);
|
|
}
|
|
|
|
/* Fast Transpose Method */
|
|
void fastTranspose(term a[], term t[])
|
|
{
|
|
int rt[20], sp[20];
|
|
int i, j;
|
|
int numcols = a[0].c;
|
|
int numterms = a[0].v;
|
|
|
|
t[0].r = numcols;
|
|
t[0].c = a[0].r;
|
|
t[0].v = numterms;
|
|
|
|
if (numterms > 0)
|
|
{
|
|
for (i = 0; i < numcols; i++)
|
|
rt[i] = 0;
|
|
|
|
for (i = 1; i <= numterms; i++)
|
|
rt[a[i].c]++;
|
|
|
|
sp[0] = 1;
|
|
for (i = 1; i < numcols; i++)
|
|
sp[i] = sp[i - 1] + rt[i - 1];
|
|
|
|
for (i = 1; i <= numterms; i++)
|
|
{
|
|
j = sp[a[i].c]++;
|
|
t[j].r = a[i].c;
|
|
t[j].c = a[i].r;
|
|
t[j].v = a[i].v;
|
|
}
|
|
}
|
|
|
|
printf("\n=== FAST TRANSPOSE RESULT ===\n");
|
|
printf("Row\tCol\tVal\n");
|
|
for (i = 1; i <= t[0].v; i++)
|
|
printf("%d\t%d\t%d\n", t[i].r, t[i].c, t[i].v);
|
|
}
|
|
|
|
int main()
|
|
{
|
|
term a[20], ts[20], tf[20];
|
|
int i;
|
|
|
|
printf("=== SPARSE MATRIX TRANSPOSE ===\n");
|
|
|
|
printf("\nEnter number of rows and columns: ");
|
|
scanf("%d%d", &a[0].r, &a[0].c);
|
|
|
|
printf("Enter number of non-zero values: ");
|
|
scanf("%d", &a[0].v);
|
|
|
|
for (i = 1; i <= a[0].v; i++)
|
|
{
|
|
printf("Enter %dth (row col value): ", i);
|
|
scanf("%d%d%d", &a[i].r, &a[i].c, &a[i].v);
|
|
}
|
|
|
|
printf("\n=== ORIGINAL SPARSE MATRIX ===\n");
|
|
printf("Row\tCol\tVal\n");
|
|
for (i = 1; i <= a[0].v; i++)
|
|
printf("%d\t%d\t%d\n", a[i].r, a[i].c, a[i].v);
|
|
|
|
/* Simple method output */
|
|
simpleTranspose(a, ts);
|
|
|
|
/* Fast method output */
|
|
fastTranspose(a, tf);
|
|
return 0;
|
|
}
|