Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C] Sotto-liste

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    178

    [C] Sotto-liste

    Ciao a tutti !

    Ho fatto un programma che stampa una lista di valori numeri. Poi ho creato la funzione controllo che stampa la sottolista compresa tra due valori identici. Ad esempio ho la seguente lista:

    2 -> 1 -> 3-> 1 -> 5 -> NULL

    Dopo la funzione controllo si genera la seguente sotto-lista

    1 -> 3 -> 1 -> NULL

    Fin qui tutto bene. Il problema si presenta quando ho una lista del genere

    2 -> 1 -> 3-> 1 -> 5 -> 1 -> 8 -> NULL

    La sotto-lista che dovrebbe generare è la seguente

    1 -> 3-> 1 -> 5 -> 1 -> NULL

    invece a me stampa

    1 -> 3-> 1 -> NULL

    La mia domanda è

    come faccio a levare il NULL a un nodo ? Grazie.

  2. #2
    Quote Originariamente inviata da Bombonera Visualizza il messaggio
    Il problema si presenta quando ho una lista del genere

    2 -> 1 -> 3-> 1 -> 5 -> 1 -> 8 -> NULL

    La sotto-lista che dovrebbe generare è la seguente

    1 -> 3-> 1 -> 5 -> 1 -> NULL

    invece a me stampa

    1 -> 3-> 1 -> NULL
    Sei certo che il risultato atteso sia quello esposto? In tale caso, il programma deve estrarre la più lunga sottolista delimitata da due valori identici, il che equivale a ricercare il secondo valore a partire dalla fine. Naturalmente nel caso di liste linkate semplici tale ricerca non è fattibile in modo immediato.

    Ne consegue che l'algoritmo da impiegare deve prevedere in ogni caso la scansione dell'intera lista. La più banale implementazione possibile richiede di memorizzare in un puntatore ausiliario la posizione "dell'ultimo nodo" (i.e. quello più a destra) contenente l'eventuale valore identico a quello di apertura.

    E' sufficientemente ovvio che, in presenza di più valori identici, il contenuto di tale puntatore ausiliario sarà sovrascritto più e più volte, fino a quando non si incontrerà l'ultimo nodo della lista che contiene il valore ricercato. Tale valore sarà quello ancora contenuto nel puntatore ausiliario a fine loop (ammesso che in lista esistano almeno due istanze del valore cercato, il che non è scontato! Il caso opposto va gestito esplicitamente) e verrà usato per gestire la stampa richiesta. Solo in tale modo sarà possibile, dopo il loop di scansione, ottenere il risultato desiderato.
    • Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    178
    Problema risolto :-)

    ecco la funzione controllo:

    codice:
    void controllo( ListNodePtr *topPtr ) {
    
    
        ListNodePtr currentPtr;
        ListNodePtr previousPtr;
        ListNodePtr endPtr;
        int flag = 0; int x;
    
    
        currentPtr = *topPtr;
        previousPtr = *topPtr;
    
    
        while( previousPtr != NULL ) {
            x = previousPtr->info;
            currentPtr = previousPtr->nextPtr;
    
    
            while( currentPtr != NULL ) {
    
    
                if( currentPtr->info == x && flag == 1 ) {
                    endPtr = currentPtr;
                }
    
    
                if( currentPtr->info == x && flag == 0) {
                    *topPtr = previousPtr;
                    flag = 1;
                }
    
    
                currentPtr = currentPtr->nextPtr;
            }
    
    
            previousPtr = previousPtr->nextPtr;
    
    
        }
    
    
        endPtr->nextPtr = NULL;
    
    
    
    
    }


    grazie per l'aiuto.

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