ACCEDI

Password dimenticata?

×
Seguici su Instagram Feed RSS Seguici su YouTube
Pagina 2 di 6 PrimaPrima 123456 UltimaUltima
Visualizzazione risultati da 11 a 20 su 60

[C] - le liste, qualcuno ne sa qualcosa?

  1. #11
    Tyler Durden
    Uomo 36 anni
    Iscrizione: 6/10/2007
    Messaggi: 16,094
    Piaciuto: 523 volte

    Predefinito

    ti ringrazio, ma un puntatore di tipo struttura? o un puntatore a un intero?


  2. #12
    Vivo su FdT
    Uomo 36 anni da Milano
    Iscrizione: 30/4/2005
    Messaggi: 3,821
    Piaciuto: 12 volte

    Predefinito

    Quote Originariamente inviata da Technics Visualizza il messaggio
    ti ringrazio, ma un puntatore di tipo struttura? o un puntatore a un intero?
    Puntatore a struttura, nel tuo caso puoi pensare a qualcosa di simile:

    nodo *next;
    nodo *current;


    Il concetto è che una generica funzione di inserimento e di stampa di una qualsiasi lista, ha come parametro il puntatore alla testa e non deve assolutamente andarne a toccare l'indirizzo.
    Purtroppo ho un esame domani e non ho tempo oggi di aiutarti, anche se ho già iniziato a toccare il source qua e là, ma se riesco te lo mando. Hai fretta?

  3. #13
    Tyler Durden
    Uomo 36 anni
    Iscrizione: 6/10/2007
    Messaggi: 16,094
    Piaciuto: 523 volte

    Predefinito

    ho l'esame il 16 e mi mancano questi argomenti qui che a detta di molti sono semplicissimi.. ma certe vole mi sento così stupido.. comunque preiser grazie mille non preoccuparti non voglio toglierti tempo allo studio.. in bocca al lupo.. posto qui eventuali risvolti

  4. #14
    Vivo su FdT
    Uomo 36 anni da Milano
    Iscrizione: 30/4/2005
    Messaggi: 3,821
    Piaciuto: 12 volte

    Predefinito

    prego! Non sono cose semplici, soprattutto se è la prima volta che le vedi. Quello della lista è però un concetto fondamentale. Per capirlo devi avere bene in mente come funzionano i puntatori e cosa accade in memoria a ogni assegnamento/allocazione che fai. Per esperienza personale, è già tanto se te le spiegano in università... ne ho imparate di più alle superiori che non lì... cmq ora provo a riscrivere da zero la funzioncina, ma non ti garantisco tempi rapidi buono studio anche a te!

  5. #15
    Vivo su FdT
    Uomo 36 anni da Milano
    Iscrizione: 30/4/2005
    Messaggi: 3,821
    Piaciuto: 12 volte

    Predefinito

    Ok, ho leggermente modificato il tuo codice. Non ci sono commenti perché non ho molto tempo, gh! Mi dispiace.. comunque spero si capisca. Se hai problemi chiedi pure
    Ti dico solo che ci sono vari approci alle liste, e vari modi di portarsi dietro i puntatori. Ho deciso di fare due typedef. Il primo coincide con il tuo typedef, mentre il secondo è un passo ulteriore, e serve a definire il puntatore a struttura come tipo di dato. In questo modo eviti ogni volta di scrivere "nodo *".
    La modifica principale che ho apportato è il valore restituito dalla funzione creanuovo(): ritorna la testa della lista.

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    struct nodo{
        int dato;
        struct nodo *succ;
    };
    
    
    typedef struct nodo elemento;
    typedef elemento *lista;
    
    
    
    lista creanuovo(lista myList, int value);
    void stampa(lista myList);
    
    int main()
    {
        lista myList = NULL;
        int n, i, value;
        printf("\nNUM ELEM : ");
        scanf("%d", &n);
        
        for(i=0; i<n; i++)
        {
            printf("Inserire valore: ");
            fflush(stdin);
            scanf("%d", &value);
            myList = creanuovo(myList, value);
        }    
        printf("\nLISTA : \n");
        
        stampa(myList);
        
        printf("\nEND\n");
        return 0;
    }
    
    lista creanuovo(lista myList, int value)
    {
        lista new = NULL;
        lista current = NULL;
        
        new = (lista)malloc(sizeof(elemento));
        new->succ = NULL;
        new->dato = value;
        
        if(myList == NULL)
        {
            myList = new;
            myList->succ = NULL;
        }
        else
        {
            current = myList;
            while(current->succ != NULL)
                current = current->succ;
            current->succ = new;
        }
        return myList;
    }
    
    void stampa(lista myList)
    {
        int i=0;
        lista tmp = myList;
        
        while(tmp != NULL)
        {
            printf("%d) %d-->", i,tmp->dato);
            tmp=tmp->succ;
            i++;
        }
        
        return;
    }

  6. #16
    Tyler Durden
    Uomo 36 anni
    Iscrizione: 6/10/2007
    Messaggi: 16,094
    Piaciuto: 523 volte

    Predefinito

    ti ringrazio sto vedendo di capirci qualcosa..
    ecco una cosa che il mio libro non spiega è cosa significa mettere lista tra parentesi prima di malloc

  7. #17
    Tyler Durden
    Uomo 36 anni
    Iscrizione: 6/10/2007
    Messaggi: 16,094
    Piaciuto: 523 volte

    Predefinito

    fflush(stdin) non l'ho mai visto.. nemmeno a lezione!

  8. #18
    Vivo su FdT
    Uomo 36 anni da Milano
    Iscrizione: 30/4/2005
    Messaggi: 3,821
    Piaciuto: 12 volte

    Predefinito

    Quote Originariamente inviata da Technics Visualizza il messaggio
    fflush(stdin) non l'ho mai visto.. nemmeno a lezione!
    In due parole:

    char un_carattere;
    int un_intero;
    un_intero = (int) un_carattere;

    Ecco, (int) un_carattere è un typecast, ovvero una conversione di tipo. Chiedo al compilatore di assegnare alla varabile un_intero il valore di un_carattere "convertito" in intero.
    La funzione malloc() ti restituisce un indirizzo (di tipo void, ovvero di nessun tipo in particolare) e tu lo devi tipizzare, dicendogli che è del tipo lista.

    Poi, fflush() è una funzione che svuota il buffer di quello che gli passi come argomento. Ogni volta che chiami scanf, devi fare fflush(stdin), ovvero devi svuotare il buffer di tastiera, altrimenti il tuo programma non ti fila di striscio nessuno scanf e tu non riesci a dargli in input nulla tranne il primo input che gli hai dato.

  9. #19
    Tyler Durden
    Uomo 36 anni
    Iscrizione: 6/10/2007
    Messaggi: 16,094
    Piaciuto: 523 volte

    Predefinito

    Quote Originariamente inviata da §¤PREISER¤§ Visualizza il messaggio
    In due parole:

    char un_carattere;
    int un_intero;
    un_intero = (int) un_carattere;

    Ecco, (int) un_carattere è un typecast, ovvero una conversione di tipo. Chiedo al compilatore di assegnare alla varabile un_intero il valore di un_carattere "convertito" in intero.
    La funzione malloc() ti restituisce un indirizzo (di tipo void, ovvero di nessun tipo in particolare) e tu lo devi tipizzare, dicendogli che è del tipo lista.
    cerchi cattedra? vieni alla sapienza. hai spiegato perfettamente in tre righe quello che non ho capito per un anno intero

    Quote Originariamente inviata da §¤PREISER¤§ Visualizza il messaggio
    Poi, fflush() è una funzione che svuota il buffer di quello che gli passi come argomento. Ogni volta che chiami scanf, devi fare fflush(stdin), ovvero devi svuotare il buffer di tastiera, altrimenti il tuo programma non ti fila di striscio nessuno scanf e tu non riesci a dargli in input nulla tranne il primo input che gli hai dato.
    però non l'ho mai usato ed è sempre andata liscia.. anzi.. ora l'ho escluso ponendolo come commento e gira lo stesso

  10. #20
    Vivo su FdT
    Uomo 36 anni da Milano
    Iscrizione: 30/4/2005
    Messaggi: 3,821
    Piaciuto: 12 volte

    Predefinito

    Quote Originariamente inviata da Technics Visualizza il messaggio
    cerchi cattedra? vieni alla sapienza. hai spiegato perfettamente in tre righe quello che non ho capito per un anno intero
    ahah se cerchi spiegazioni chiare a informatica, fai meglio a rassegnarti. Sono abituati a interagire col computer e con persone che ragionano come computer.. la didattica lascia spesso a desiderare. Ho passato l'esame di info1 con le conoscenze pregresse delle superiori, ma per il semplice fatto che a lezione non spiegavano NIENTE che avesse a che vedere con l'informatica. Info2 invece è stato l'opposto, un casino immane.. un robot era più umano del prof... ma ormai è acqua passata

    però non l'ho mai usato ed è sempre andata liscia.. anzi.. ora l'ho escluso ponendolo come commento e gira lo stesso
    Dipende, generalmente non funziona, esperienza personale, sia su linux che su win. Per sicurezza, tu mettilo, perché poi ti trovi all'esame o in lab che non riesci ad andare avanti per una simile banalità.

Pagina 2 di 6 PrimaPrima 123456 UltimaUltima

Discussioni simili

  1. Una soddisfazione grande... Niente + liste!
    Da jacka nel forum Amici animali
    Risposte: 4
    Ultimo messaggio: 9/7/2008, 23:57
  2. qualcuno ne capisce qualcosa?
    Da Jack Ass nel forum Internet e computer
    Risposte: 26
    Ultimo messaggio: 3/1/2008, 4:38
  3. qui qualcosa non quadra....
    Da Patu nel forum Off Topic
    Risposte: 32
    Ultimo messaggio: 21/2/2006, 21:23