Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C] Inserire elementi un una lista

    Dovrei inserire in una lista un insieme di elementi chiesti in input, fino a che non viene
    inserito un valore sentinella -1...
    questo è il codice, xò c'è qualche errore...se qualcuno ha tempo, potreste dirmi come
    correggerlo?



    #include <stdio.h>


    int main()
    {

    struct lista
    {
    int dato;
    struct lista *succ;
    };

    typedef struct lista lista;
    int x;
    lista *nuovo;

    printf("inserire valori: ");
    scanf("%d",&x);
    if(x!=-1){
    nuovo=(lista*)malloc(sizeof(lista));
    x=nuovo->dato; // Inserisco il primo elemento della lista
    int y;
    scanf("%d",&y);
    y=nuovo->succ;
    while (y!=-1){
    nuovo=(lista*)malloc(sizeof(lista));
    y=y->succ;
    scanf("%d",&y);
    }
    y->succ=NULL; // quando inserisco il valore sentinella, la lista è finita.
    }
    else nuovo->=NULL;
    free(nuovo);

    return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se dici che "c'e' un errore" nessuno si prendera' la briga di cercare "non si sa che cosa" ...

    Magari e' meglio essere piu' precisi, se vuoi aiuto ...

  3. #3
    Il problema è che vorrei sapere anche se il procedimento è giusto...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ci sono parecchi errori ... forse e' bene che tu commenti riga per riga, indicando perche' l'hai inserita e a cosa serve ...

    In questo modo imparerai dai tuoi errori ...

  5. #5
    #include <stdio.h>


    int main()
    {

    struct lista
    {
    int dato;
    struct lista *succ;
    }; /* struttura elementi della lista */

    typedef struct lista lista;
    int x; /* uso "x" per assegnare il primo elemento della lista, in seguito dichiarerò "y" che userò per gli elementi successivi.*/

    lista *nuovo;

    printf("inserire valori: ");
    scanf("%d",&x);

    if(x!=-1){
    nuovo=(lista*)malloc(sizeof(lista)); /* alloco memoria x il primo elemento */
    x=nuovo->dato; /* Inserisco il primo elemento della lista */
    int y;
    scanf("%d",&y);
    y=nuovo->succ;

    while (y!=-1){ /* finchè non viene inserito il valore -1 continuo a assegnare nuovi elementi alla lista */

    nuovo=(lista*)malloc(sizeof(lista));
    y=y->succ;
    scanf("%d",&y);
    }

    y->succ=NULL; /* quando inserisco il valore -1, la lista è finita. */
    }

    else nuovo->=NULL; /* se x è uguale a -1 la lista deve essere vuota */

    free(nuovo); /* libero la memoria allocata */

    return 0;
    }

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Metti la dichiarazione della struttura e del tipo, fuori dal main.

    Il puntatore all'inizio della lista, deve essere NULL in partenza ...

    Non fare differenza tra il primo elemento e i successivi (x e y) ... Utilizza un solo ciclo.

    Questa istruzione

    x=nuovo->dato

    significa il contrario di quello che vuoi fare ...

    La liberazione della memoria con la free, è sbagliata. Esistono tanti elementi allocati ...

  7. #7
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    aldilà degli errori di assegnazione (secondo me non hai chiaro come funzionano le liste in memoria), devi gestire un puntatore sul primo elemento e deve restarci per sempre. Se perdi l'indirizzo del primo elemento hai perso tutta la lista.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.