Esercizio Particolare Liste dinamiche

di il
2 risposte

Esercizio Particolare Liste dinamiche

Ciao a tutti, ormai vi avrò rotto le scatole continuando ad aprire nuovi topic, ma confido nella vostra pazienza...
Oggi vi presento un mio programma preso da una prova d'esame. La richiesta è molto particolare e chiede di eliminare l'elemento centrale di una lista dinamica percorrendola una sola volta in totale (anche con più puntatori contemporaneamente). Bisogna sempre cancellare l'elemento che è dato dalla parte intera di (N+1)\2, dove naturalmente N è il numero di elementi. Allora la mia strategia consiste nel percorrere la lista contemporaneamente con due puntatori,ed ogni volta che il primo dei due compie 2 "salti", il secondo ne compie uno, finchè il primo non raggiunge la fine della lista. La funzione è molto breve e so per certo che la strategia è la migliore ed è giusta (anche il mio prof nella risoluzione la utilizza). Ho qualche problema nell'eliminare l'elemento trovato dal momento che:
- Se uso free, l'output del programma viene infinito e continua a scrivere numeri a caso.
- se non uso free (sono al corrente della spazzatura che viene a crearsi senza usare free) mi stampa la lista così come prima.
Queste sono le linee di codice, aspetto risposta.
#include <stdio.h>
#include <stdlib.h>
#include "FBListeDinamiche.c"
TipoLista *DeleteElemCent(TipoLista *testa)
{
    TipoLista *cursore1P, *cursore2P, *PuntProvv;
    int i = 0;
    cursore1P = testa;
    cursore2P = testa;
    while (cursore2P->Prossimo != NULL)
    {
        cursore2P = cursore2P->Prossimo;
        i++;
        if (i % 2 == 0)
            cursore1P = cursore1P->Prossimo;
    }
    PuntProvv = cursore1P;
    cursore1P = cursore1P->Prossimo;
    free(PuntProvv);
    return (testa);
}
void main()
{
    TipoLista *Testa;
    Testa = CreaRiempiLista();
    Testa = DeleteElemCent(Testa);
    StampaLista(Testa);
}

2 Risposte

  • Re: Esercizio Particolare Liste dinamiche

    P.S. cercate di leggervi il codice, magari ho fatto qualche errore nella strategia. Per quanto riguarda le due funzioni crealista e stampalista sono entrambe contenute nel file FBlistedinamiche.c che ho incluso, e funzionano perfettamente in molti altri esercizi.
  • Re: Esercizio Particolare Liste dinamiche

    Ipotizzando che l'impostazione logica (non l'ho controllata) sia corretta e che quindi all'uscita dal while cursore1P punti all'elemento centrale, invece dell'istruzione
    cursore1P = cursore1P->Prossimo;
    (che è inutile) non dovrebbe esserci un'istruzione che vada a collegare il nodo precedente a cursore1P con quello successivo a cursore1P?!
Devi accedere o registrarti per scrivere nel forum
2 risposte