ho avuto un problema nella compilazione del file.c
/tmp/cc6zrWyR.o: In function `main':
listefunzioni.c:(.text+0x71): undefined reference to `InsertElement'
collect2: error: ld returned 1 exit status
CODICE
/tmp/cc6zrWyR.o: In function `main':
listefunzioni.c:(.text+0x71): undefined reference to `InsertElement'
collect2: error: ld returned 1 exit status
CODICE
Codice:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
struct listainfo{
int valore;
};
struct nodo{
//sto dichiarando una struttura di tipo listainfo che contiene vari tipi di dato all'interno della struttura nodo //
struct listainfo info;
struct nodo *next;
};
//definizione puntatore a listainfo
typedef struct listainfo *p_lista;
//definizione puntatore a nodo
typedef struct nodo *p_nodo;
//definizione struttura listainfo
typedef struct listainfo l_info;
//definizion struttura nodo
typedef struct nodo l_nodo;
// Dichiarazioni FUNZIONI LISTE//
//funzione che restituisce un puntatore alla struttura nodo vuota //
p_nodo CreaNodo();
//funzione che restituisce la struttura listainfo che può contenere diversi tipi di dato nome cognome eta ...//
l_info LeggiInfo();
//funzione che restitusce un puntatore a nodo che ha come parametri il puntatore a nodo e una struttura listainfo con vari dati vuoti da riempire
p_nodo InsertElement(p_nodo pnodo,l_info);
p_nodo InserisciElementoInOrdine(p_nodo pnodo,l_info info);
//stampa il nodo che contiene la listainfo//
void stampa_nodo(p_nodo nodo);
int main()
{
// creo un puntatore a nodo//
p_nodo pnodo1;
int n_elementi,i;
//lista che contiene i vari tipi di dato//
l_info informazione;
//Creo una primo nodo e lo inizializza tramite il puntatore a nodo//
pnodo1 = CreaNodo();
//alla lista info inserisco il contenuto che era vuoto//
//uso la funzione inseriscielementoINlista che avra come parametri un puntatore a nodo per accedere alla listainfo e la listainfo da riempire//
printf("inserisci il numero di elementi da inserire");
scanf("%d",&n_elementi);
for(i=0;i<n_elementi;i++)
{
informazione = LeggiInfo();
pnodo1 = InsertElement(pnodo1,informazione);
}
//stampa il nodo con la relativa lista che contiene varie informazioni/
stampa_nodo(pnodo1);
return 0;
}
//FINE MAIN//
p_nodo CreaNodo()
{
return NULL;
}
// funzione che mi restituisce una struttura di tipo listainfo e riempie i vari membri di listainfo
// in questo caso int valore/
//
l_info LeggiInfo()
{
// dichiaro struttura che contiene diversi tipi di dato da gestire//
l_info info;
printf("inserisci il numero");
scanf("%d",&info.valore);
return info;
}
p_nodo Insert_Element(p_nodo p1,l_info info)
{
//primo nodo
p_nodo fnodo;
//il puntatore nodo1 avra l'indirizzo di memoria di una lista di tipo nodo//
//
//per accedere alla listainfo accedo ad un membro della lista nodo che contiene un altra struttura di tipo listainfo info
fnodo = (l_nodo*)malloc(sizeof(l_nodo));
if(fnodo!=NULL)
{
fnodo->info = info;
fnodo->next = NULL;
}
return fnodo;
}
//devo stampare il campo info di ogni nodo che sto visitando fino al successivo fino a NULL
void stampa_nodo(p_nodo firstnodo)
{
p_nodo phead;
//phead è il puntatore al primo nodo che conterrà la listainfo//
phead = firstnodo;
while(phead!=NULL)
{
printf("%d",phead->info.valore);
//vado al nodo successivo fino a NULL//
phead = phead->next;
}
}
p_nodo InserisciElementoInOrdine(p_nodo nodocorrente,l_info info)
{
p_nodo curr,prec,nuovonodo;
//1 ricerca della posizione//
prec = NULL;
//curr viene impostato al primo nodo della lista
curr = nodocorrente;
// se il numero che vogliamo inserire all'interno della lista è maggiore del numero che stiamo visitando nel nodo
// allora deve scorrere in avanti
while(curr!=NULL && info.valore > curr->info.valore)
{
prec = curr;
curr = curr->next;
}
//2 allocazione dinamica
nuovonodo = (l_nodo*)malloc(sizeof( l_info));
while(nuovonodo!=NULL)
{
nuovonodo->info = info;
}
//3 aggiornamento elemento
//se prec == null allora
if(prec ==NULL)
{
nuovonodo->next = nodocorrente;
nodocorrente = nuovonodo;
return nodocorrente;
}
else
{
prec->next = nuovonodo;
nuovonodo->next = curr;
return nodocorrente;
}
}