[C] Inserimento elementi matrice in una lista
ciao a tutti, vorrei sapere cosa c'è di sbagliato in questo codice e come posso correggerlo.
Dovrei inserire all'interno di una lista concatenata gli elementi non nulli della matrice A:
grazie in anticipo.
Dovrei inserire all'interno di una lista concatenata gli elementi non nulli della matrice A:
#include <stdio.h> #include <stdlib.h> #define N 4 typedef struct list_ { unsigned int i; unsigned int j; float data; struct list_* next; }list; typedef list* link; void insert(link* listA, float value, unsigned int i, unsigned int j) { link nuovo = malloc(sizeof(list)); if(nuovo) { nuovo->next = NULL; nuovo->data = value; nuovo->i = i; nuovo->j = j; link temp = *listA; while(temp) { temp = temp->next; } temp->next = nuovo; } } link matrixToList(float A[][N]) { unsigned int i, j; link listA = NULL; for(i = 0; i < N; ++i) { for(j = 0; j < N; ++j) { if(A[i][j] != 0.0) { insert(&listA, A[i][j], i, j); } } } return listA; } void print(link listA) { if(listA) { link h = listA; while(h) { printf("(%u,%u,%.1f)", h->i, h->j, h->data); } printf("NULL\n"); } } int main() { float A[][N]= {0, 1.1, 0, 0, 1.2, 0, 0, 0.1, 0, 1.3, 0, 0, 0, 0, 1.0, 0}; float x[N] = {1.0, 2.0, 1.0, 0.0}; link listA = matrixToList(A); print(listA);
grazie in anticipo.
Risposte
#include <stdio.h> #include <stdlib.h> #define N 4 typedef struct list_ { unsigned int i; unsigned int j; float data; struct list_* next; }list; typedef list* link; void insert(link* listA, float value, unsigned int i, unsigned int j) { link nuovo = malloc(sizeof(list)); if(nuovo) { nuovo->next = NULL; nuovo->data = value; nuovo->i = i; nuovo->j = j; link temp = *listA; while(temp) { temp = temp->next; } temp->next = nuovo; } } link MtL(float A[][N]) { unsigned int i, j; link listA = NULL; for(i = 0; i < N; ++i) { for(j = 0; j < N; ++j) { if(A[i][j] != 0) { insert(&listA, A[i][j], i, j); } } } return listA; } void print(link listA) { if(listA) { link h = listA; while(h) { printf("(%u,%u,%.1f)", h->i, h->j, h->data); h = h->next; } printf("NULL\n"); } } int main() { float A[][N]= {0, 1.1, 0, 0, 1.2, 0, 0, 0.1, 0, 1.3, 0, 0, 0, 0, 1.0, 0}; float x[N] = {1.0, 2.0, 1.0, 0.0}; link listA = MtL(A); print(listA); }Anche così mi da problemi
niente sono riuscito a risolvere.