Gestione di una lista

di il
2 risposte

Gestione di una lista

Ho un esercizio da fare sulla creazione di una lista,l'inseriemnto di elementi in testa e la funzione di visualizzazione della lista stessa ma il programma non funziona e non capisco quale sia il problema
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct nodo{
   int num;
   struct Nodo *next;
};

typedef struct nodo Nodo;
void inserireNodoInTesta (int);
void visualizza_lista(Nodo *, int);
int main(){
    /**
    Scrivere una funzione che inserisce un nodo in testa alla lista. Utilizzare la funzione per
    popolare una lista di numeri interi positivi inseriti dall'utente. L'acquisizione termina
    quando il valore inserito è negativo.
    **/
    int ciclo;
    printf("Quanti numeri vuoi inserire?: ");
    scanf("%d", &ciclo);
    inserireNodoInTesta(ciclo);
    return 0;
}

void visualizza_lista(Nodo *l2, int ciclo){
    int i;
    printf("\n lista ---> ");
    for(i=2; i<=ciclo; i++){
        printf("%d", l2->num);
        printf(" ---> ");
        l2 = l2->next;
    }
    l2=NULL;
    printf("NULL\n\n");
}

void inserireNodoInTesta (int ciclo){
    int i;
    Nodo* l1=NULL;
    Nodo* l2=NULL;
    l1=(Nodo *)malloc(sizeof(Nodo));
    printf("Inserisci 1 elemento della lista: ");
    scanf("%d", &l1->num);
    l2=l1->next;
    for(i=2; i<=ciclo; i++){
        l2=(struct Nodo *)malloc(sizeof(Nodo));
        printf("\nInserisci il %d elemento della lista: ", i);
        scanf("%d", &l2->num);
        l2 = l2->next;
    }
    visualizza_lista(l1, ciclo);
}

2 Risposte

  • Re: Gestione di una lista

    Non ho il tempo, ora, di esaminare bene il codice
    e di provarlo. Ti propongo solo alcune osservazioni preliminari.

    Se il programma chiede di uscire dal ciclo di inserimento
    quando si digita un numero negativo, non capisco perche'
    si chiede in anticipo all'utente quanti numeri inserire.

    Secondo me, e' meglio separare l'input dei numeri
    dall'inserimento in lista e dalla visualizzazione;
    forse sarebbe meglio cosi':

    finche' n>=0
    {
    leggi n
    chiamata funzione metti n in lista
    }
    chiamata funzione visualizza lista

    E' bene, infatti, che ogni funzione esegua un solo compito alla volta.

    Visto che gli inserimenti devono essere fatti solo in testa,
    la tua lista funziona come una pila; il primo nodo inserito,
    sara' l'ultimo ad essere attraversato dal ciclo di visualizzazione;
    tale nodo deve quindi avere il campo next=NULL; cosi' la visualizzazione
    puo' terminare quando si raggiunge questo nodo, senza bisogno di
    sapere in anticipo quanti nodi sono stati inseriti.
  • Re: Gestione di una lista

    Correggo:

    finche' n>=0
    {
    leggi n
    chiamata funzione metti n in lista (se n>=0)
    }
    chiamata funzione visualizza lista
Devi accedere o registrarti per scrivere nel forum
2 risposte