PROBLEMA Esercizio sulle liste

Pubblicità

davidson

Nuovo Utente
Messaggi
33
Reazioni
5
Punteggio
26
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

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;

                        }



                    }
 
Pubblicità
Pubblicità
Indietro
Top