PROBLEMA Esercizio sulle liste

davidson

Nuovo Utente
33
5
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;

                        }



                    }
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Cosa non hai capito?
Non esiste una funzione chiamata InsertElement. Ne esiste una chiamata Insert_Element però.
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili