Я написал этот код для реализации разреженной матрицы с использованием связанного списка, но я не понимаю, почему я получаю сообщение об ошибке (ошибка сегментации)..... может кто-нибудь помочь мне с этим.
Я создал массив связанного списка, индекс массива представляет собой строку матрицы, а в связанном списке я храню столбец и значение данных.
Ниже есть ссылка на изображение, которое может помочь вам лучше понять код.
https://i.stack.imgur.com/9rwH9.png
#include <stdio.h>
#include<stdlib.h>
struct Node {
int col;
int data;
struct Node *next;
}*first;
void Create(struct Node **A, int m, int n) {
struct Node *t, *last;
printf("Enter the elements of sparse matrix:\n");
for(int i=0; i<m; i++){
first = NULL;
last = NULL;
for(int j=0; j<n; j++){
int val;
scanf("%d", &val);
if(val != 0){
t= (struct Node *)malloc(sizeof(struct Node));
t->col = j;
t->data = val;
t->next = NULL;
if(first)
first = t;
if(last)
last->next = t;
last = t;
}
}
A[i] = first;
}
return;
}
void Display(struct Node **A, int m, int n){
printf("\nSparse matrix is:\n");
for(int i=0; i<m; i++){
struct Node *p = A[i];
for(int j=0; j<n; j++){
if(p->col == j){
printf(" %d ", p->data);
if(p)
p = p->next;
}
else printf(" 0 ");
}
printf("\n");
}
}
int main() {
int m=5, n=6;
struct Node **A = (struct Node **)malloc(m * sizeof(struct Node));
Create(A, m, n);
Display(A, m, n);
return 0;
}