[C] Inserimento elementi matrice in una lista

Nandone169
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:
#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
Nandone169
#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

Nandone169
niente sono riuscito a risolvere.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.