Aiuto con una lista

di Anonimizzato7811 il
27 risposte
È la prima volta che vedo le liste,mi è stata data questa lista semplicissima da un prof,ma dev c++ mi dà errore su typedef, dove devo correggere?

#include <cstdlib>
#include <iostream>
using namespace std;
typedef elem* lista;

lista creaLista (int n)
{lista p, p0 = 0;
for (int i = 1; i <= n; i++)
{p = new elem;
cin >> p->info;
p->succ = p0;
p0 = p;
}
return p0;
}

27 Risposte

  • Dov'è definito elem?
  • È che io non so come si costruisce una lista, ho preso questa come esempio e volevo vedere se funzionasse, tu come mi consigli di corregerla?
  • Continua studiare. Prima devi imparare cosa sono le strutture. Poi i puntatori. Una volta imparatociò puoi iniziare le liste lincate che sono una struttura che punta ad un altra struttura andando sempre avanti. Poi le liste bilicate dove puoi tornare anche indietro. Ma se non hai le basi è inutile che ti faccio un esempio dove poi michiederai ma questo cos'è. Gli esercizi con le matrici li hai capite oppure copia/incolla e esame superato?
  • Se tu mi sai dire cos'è new, cos'è -> cos'è * ecc e mi fai l'esempio di una struttura allora possiamo inziare a raggionare.
  • Sì quelli sì, il problema è che ho letto tutto il capitolo sulle liste, so il significato di struct, nodo ecc..ecc, è solo che sono spiegate veramente male, sai per caso un sito dove potere leggere qualcosa?
  • Allora, io so che in una lista vi è un nodo iniziale che punta un altro nodo, ogni nodo è costituito da un puntatore e un'informazione, p-> info significa riempire l'elemento p di un'informazione
  • Sì ma la struct l'ho capita, la spiega bene nel mio libro, l'unica cosa che non spiega è l'impostazione di una semplice lista base
  • Allora inziamo da capo:
    Una struttura non è altro che una collezione di oggetti di vario tipo (int, char, string ecc) dentro un unica variabile la cui defnizione è:
    
    struct questaStruttura
    {
    int oggetto1;
    long oggetto2;
    char oggetto3;
    .....
    }
    
    come vedi è un collettore di oggetti. quando tu vuoi usare un collettore del genere non fai altro che definirlo così:
    
    questaStruttura miaStruttura;
    miaStruttura.oggetto1 = 5;
    .... ecc
    
    c'è un caso speciale. un puntatore a una struttura dentro la struttura stessa.
    
    struct questaStruttura
    {
    int oggetto1;
    long oggetto2;
    char oggetto3;
    .....
    questaStruttura *next;
    }
    
    
    quel *next significa che il campo next mi punterà (notare l' *) ad un altro collettore dello stesso tipo. esempio:
    
    questaStruttura miaStruttura1;
    miaStruttura1.oggetto1 = 5;
    questaStruttura miaStruttura2;
    miaStruttura2.oggetto1 = 3;
    miaStruttura2.next = &miaStruttura1;
    
    spiegazione: miaStruttura2.next punta all'indirizzo di miaStruttura1.Questo fa si che le due strtture siano collegato tra loro. Se riesci a capire questo allargando un po le idee capisci che questa è la base x creare una lista.
  • Ad esempio potrei correggere scrivendo:
    #include <cstdlib>
    #include <iostream>
    using namespace std;
    struct persona
    { char nome[20];
    int età;
    persona* successiva;
    };
    typedef persona* lista;

    lista creaLista (int n)
    {lista p, p0 = 0;
    for (int i = 1; i <= n; i++)
    {p = new elem;
    cin >> p->info;
    p->succ = p0;
    p0 = p;
    }
    return p0;
    }
    int main()
    {const int numero_persone = 10;
    crealista(numero_persone);
    }
  • Sì sì,la struct l'ho capita
  • OK quasi ci siamo
    
    #include <cstdlib>
    #include <iostream>
    using namespace std;
    
    struct persona
    {	char nome[20];
    	int età;
    	persona* successiva;
    };
    
    typedef persona* lista;
    
    lista creaLista (int n)
    {
    	lista p, p0 = 0;
    
    	for (int i = 1; i <= n; i++)
    	{
    		p = new persona;
    		cin >> p->età;
    		p->successiva = p0;
    		p0 = p;
    	}
    	return p0;
    }
    
    int main()
    {
    	const int numero_persone = 10;
    	creaLista(numero_persone);
    	return 0;
    }
    
    Un po di problemi. dopo l'uscita della funzione creaLista viene persa la testa delle lista cioè p0. Dovresti salvarla da qualche parte. Devi ancora scrivere la funzione distruggiLista. non so se ti hanno insegnato che in C++ ogni volta che usi new dovrebbe esistere anche il corrispettivo delete che rilascia la memoria che hai chiesto in precedenza.
  • Grazie tante per l'aiuto, è solo che non mi parte il programma,non mi dà errore ma quando vado su run non parte
  • Quello che ti ho messo parte x beninno e non da nessun errore.
Devi accedere o registrarti per scrivere nel forum
27 risposte