ACCEDI

Password dimenticata?

×
Seguici su Instagram Feed RSS Seguici su YouTube
Pagina 1 di 6 12345 ... UltimaUltima
Visualizzazione risultati da 1 a 10 su 60

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

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

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

    ci risiamo, testi fatti male, dispense peggio.. lucidi non parliamone..

    non riesco a capire una beneamata mazza delle liste in C
    qualcuno ne sa qualcosa? vi prego


  2. # ADS
     

  3. #2
    obo
    .
    35 anni
    Iscrizione: 23/9/2005
    Messaggi: 35,505
    Piaciuto: 122 volte

    Predefinito

    hai già guardato qui?
    Introduzione alle Liste | Guida C | Programmazione.HTML.it

    html.it secondo me ha delle ottime guide, almeno io con java mi sono trovato molto molto bene, più del libro

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

    Predefinito

    si.. già letta tutta.. ma non è affatto chiara.. cioè.. in teoria è ottima ma non da spiegazioni al perchè fa determinate cose.. al "come si fa" insomma
    sto in crisi..

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

    Predefinito

    nello specifico non capisco come riempire dinamicamente una lista.. ovvero senza numero di valori di partenza.. ma fermandosi ad un determinato evento.. mi sono perso tra le allocazioni dinamiche e l'inizializzazione dei nuovi puntatori a struttura

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

    Predefinito

    Hai presente come è fatto a spanne un array? Se sì, immagina un array di char e immagina un array di struct. Ecco, non cambia nulla, se non che un array di char è automaticamente concatenato (data la natura della variabile) mentre un "array di struct" (ovvero la tua lista) deve essere strutturato in modo che ogni elemento dell'array (della lista) punti al successivo e al precedente. Per farlo, nell'implementazione del typedef della tua struttura, devi semplicemente definire un puntatore allo stesso tipo di struttura. Ovviamente, il tuo array è dato dal puntatore al primo elemento della lista, e tramite il puntatore "head" puoi puntare all'elemento successivo. Una volta puntato all'elemento successivo, potrai accedere all'indirizzo del terzo elemento, e così via.
    Tutto qui =)
    Se non ti è chiaro e vuoi del codice chiedi pure, è che sono arrugginito sul C e non vorrei scrivere boiate per nulla.

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

    Predefinito

    Ah dimenticavo: siccome funziona come un array, devi allocare con la funzione malloc() per poter creare un nuovo elemento. Una volta creato, assegni il valore del puntatore appena creato al puntatore alla prossima struttura presente nell'elemento che vuoi della lista. Prima di far questo, però, devi sganciare l'elemento che è gia referenziato come successivo, assegnado il valore del suo indirizzo al puntatore all'elemento successivo della nuova struttura che hai allocato con malloc.

    Prova a dare un'occhiata qui: http://it.wikipedia.org/wiki/Lista_(informatica)

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

    Predefinito

    si fin qui c'ero.. solo una cosa.. con i vettori me la cavo bene..
    alloco tranquillamente utilizzando il puntatore

    quello che non riesco a fare è ad esempio una lista che si riempie man mano (non necessariamente in maniera ordinata basta un numero dietro l0altro come in un vettore) fin quando non accade un evento.. ad esempio fin quando il dato in input non è 5..

    ecco.. la funzione che dovrebbe fare sta cosa non mi è affatto chiara e ogni esercizio che provo a fare mi da un BUS ERROR , un errore che inizio ad odiare.. faccio casino coi puntatori credo

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

    Predefinito

    Innanzitutto assicurati che appena allochi spazio per una struttura, il puntatore alla struttura successiva sia NULL. Per la funzione di cui parli, dipendi da cos'hai fatto prima che l'utente inserisce il numero da tastiera.

    1. leggi numero
    2. se == 5 esci
    3. altrimenti alloca un puntatore temporaneo (e.g.: tmp)
    4. assegna al puntatore alla struttura successiva della struttura appena allocata un NULL (tmp->next = NULL.
    5. assegna al tuo puntatore lista corrente il puntatore temporaneo appena creato (lista->next = tmp


    PS: tutto il giochetto del NULL lo puoi evitare assegnandolo direttamente nel typedef della tua struct, in testa al programma... dovrebbe funzionare

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

    Predefinito

    posso approfittare della tua pazienza?
    cosa c'è di sbagliato in questo programma
    non fa nulla di che.. chiede quanti valori vogliamo inserire.. e tramite una funzione crea e aggiunge valori alla lista e tramite una seconda li stampa.. dovrebero essere i primi rudimenti delle liste.. eppure gira ma non mi stampa nulla-.-

    #include<stdio.h>
    #include<stdlib.h>

    typedef struct nodo{
    int dato;
    struct nodo *succ;
    }nodo;

    void creanuovo(nodo *T);
    void stampa(nodo *T);
    int main(){
    nodo *testa;
    testa=NULL;
    int n, i=0;
    printf("\nNUM ELEM : ");
    scanf("%d", &n);

    while(i<n){
    creanuovo(testa);
    i++;
    }

    printf("\nLISTA : \n");

    stampa(testa);

    printf("\nEND\n");
    return 0;
    }

    void creanuovo(nodo *T){
    nodo* new;
    int val;

    new=(nodo *)malloc(sizeof(nodo));
    new->succ=NULL;

    printf("ins val : ");
    scanf("%d",&val);

    while(T!=NULL){
    T=T->succ;
    }

    new->dato=val;
    T=new;

    return;
    }

    void stampa(nodo *T){
    int i=0;

    while(T!=NULL){
    printf("%d-->", T->dato);
    T=T->succ;
    i++;
    }

    return;
    }

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

    Predefinito

    Devi lavorare con due puntatori. Uno lo usi come indice, l'altro come prossimo elemento, in modo da lasciare intoccato il puntatore della testa. Se modifichi quello, perdi l'indirizzo in memoria del punto di partenza della tua lista! Cmq ora sto dando un'occhiata, e sembra che il problema sia proprio la funzione creanuovo().
    Purtroppo sono arrugginito su queste cose, non le guardo più da tempo.. se riesco ti faccio sapere

Pagina 1 di 6 12345 ... UltimaUltima

Discussioni simili

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