Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    25

    [C] Funzione ricorsiva crea lista da array

    Salve a tutti,
    sto cercando di scrivere una funzione ricorsiva che prendendo un array come argomento mi restituisca una lista. il codice che segue è il meglio che ho potuto fare:

    codice:
    #include <stdio.h>
    typedef struct lista
    	{
    	int num;
    	struct lista *suc;
    	} Ls;
    Ls* creaListaDaArray(int array[])
    { 
    Ls* testa; 
    if (array[0] == 0) return(NULL);
    else	{
    	testa=(Ls*)malloc(sizeof(Ls));
    	testa->num = array[0];
    	testa->suc = creaListaDaArray(array+1);
    	return(testa);
    	}
    }
    void stampaLista(Ls *testa)
    {
    if (testa == NULL)
    	{
    	printf("NULL");
    	return;
    	}
    while (testa != NULL)
    	{
    	printf("%d ", testa->num);
    	testa = testa->suc;
    	}
    }
    
    main()
    {
    int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    Ls *testa;
    testa = creaListaDaArray(array);
    stampaLista(testa);
    }
    Non riesco a capire dove sbaglio perché il programma mi stampa:
    1 2 3 4 5 6 7 8 9 10 7209077 7733353 74 2 2293680 4198887 1 4143072 4139368 4210
    688 2293668 -1 2293672 -2126502240 -1 4139368

    Inoltre se un elemento del array fosse pari a 0 la funzione creaListaDaArray non funzionerebbe... Sarei molto grato se qualcuno mi desse una mano a risolvere il problema.

  2. #2
    Facile:
    se l'array fosse

    int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0};

    funzionarebbe tutto!!
    il problema è che senza lo 0 finale non mette l'ultimo elemento della lista a null!! e quindi il ciclo di stampa va avanti finche' non trova uno 0 memorizzato casualmente in memoria!
    OK??

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    25
    Originariamente inviato da roxxy86
    Facile:
    se l'array fosse

    int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0};

    funzionarebbe tutto!!
    il problema è che senza lo 0 finale non mette l'ultimo elemento della lista a null!! e quindi il ciclo di stampa va avanti finche' non trova uno 0 memorizzato casualmente in memoria!
    OK??
    Grazie per avermi risposto.
    Capisco che la funzione andrebbe bene se l’ultimo elemento del array, e solo esso, fosse pari a 0 ma vorrei sapere come bisogna scriverla affinché andasse bene per qualsiasi array di interi passato come argomento. Ad esempio:
    codice:
    int array = {1, 2, 3, 0, 6, 10};
    Ls  *creaListaDaArray(int array[])
    {
    // ???
    }

  4. #4
    il discorso è questo:
    in C++ non è possibile sapere quanto è grande un array (non esiste un arry.length) quindi o utilizzi una variabile nella quale memorizzi il numero di elementi inseriti, o utilizzi una sentinella alla fine... c'è poco da fare!
    e la sentinella potrebbe essere un numero del tipo MAX_INT o MIN_INT

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 © 2019 vBulletin Solutions, Inc. All rights reserved.