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

    cercare sottosequenza in lista concatenate

    Salve ragazzi, come da oggetto come faccio a cercare una sottosequenza (memorizzata in una lista concatenata) in un'altra lista concatenata? per favore datemi una mano...non so come fare...il linguaggio è ansi c...grazie 1000000

  2. #2
    Inizia con il mostrare cosa hai scritto finora (ovviamente senza la parte della ricerca di sottosequenze, visto che non sai come implementarla).
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  3. #3

    parte di acquisizione

    fino ad'ora ho normalmente acquisito le due liste concatenate leggendo i dati da due file differenti...i puntatori a queste due liste li dovrei poi passare alla funzione che controlla se nella lista2 vi sono delle sottosequenze uguali alla sequenza di dati presenti in lista1...

  4. #4
    Ok, un'ultima informazione: devi restituire il numero delle sottosequenze eventualmente presenti o è sufficiente un valore booleano ( 0 = nessuna sottosequenza, 1 = almeno una sottosequenza)?

    Dal punto di vista concettuale è semplice, basta scorrere la sottosequenza passando all'elemento successivo se l'elemento precedente è stato individuato nella sequenza. Se l'elemento successivo non è presente si riparte dal principio e si procede fino ad aver concluso la scansione di almeno una delle 2 sequenze. Se giungi alla fine della sottosequenza significa che essa è interamente contenuta nella sequenza, se invece arrivi all'ultimo elemento della sequenza ma non della sottosequenza allora devi restituire FALSE.
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  5. #5

    informazione da restituire

    l'ìinformazione che dovrei restituire è praticamente la posizione di inizio di ogni sottosequenza all'interno della lista in cui si effettua la ricerca....
    esempio:
    lista_sottosequenza: 5-6-7-8
    lista in cui cercare la sottosequenza: 1-2-3-4-5-6-7-8-9-0-5-6-7-8-0

    si dovrebbe restituire: "5" (posizione di inizio prima sottosequenza) e "11" (inizio seconda sottosequenza)

    P.s. grazie sei molto gentile...

  6. #6
    si hai ragione...concettualmente è semplice...ma sono ancora alle prime armi con il c e non riesco a tradurre il tutto in codice... e m'inpallo
    prometto che ricambierò il favore come posso... grazie...

  7. #7
    e non riesco a tradurre il tutto in codice..
    Prova a tradurlo in pseudo-codice, poi ci si lavora insieme per renderlo funzionante.
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  8. #8

    possibile soluzione

    codice:
    temp1=lista_che_contiene_sottosequenza;
    temp2=lista_in_cui_cercare_sottosequenza;
    
    indice=1;        //indica la posizione in cui potrebbe iniziare la sequenza
    n_volte=0;     //indica il numero di volte che è stata trovata la sequenza
    while(temp2!=NULL)      
    {
      if(confronta_nodi(temp2,temp1)==0)     //confronta_nodi ritorna 0 se i nodi nn sono uguali,                          
                                                            //ritorna 1 se i nodi sono uguali    
      {
        temp2=temp2->next;
        indice++;
        continue;
      }
      if(confronta_nodi(temp2,temp1)==1)
      {
        check=1;
        temp3=temp2->next;
        temp1=temp1->next;
        while(confronta_nodi(temp3,temp1)==1)
        {
          check++;
          if(check==lunghezza_lista_che_contiene_sottosequenza)
             break;
          temp1=temp1->next;
          temp3=temp3->next;
        }
        if(check==lunghezza_lista_che_contiene_sottosequenza)
        {
          n_volte++;
          ritorno l'indice (indice);
          temp2=temp3->next;
          temp1=lista_che_contiene_sottosequenza;         //cosi temp1 punta di nuovo all'inizio
          indice=indice+lunghezza_lista_che_contiene_sottosequenza;
        }
        else
        {
          temp1=lista_che_contiene_sottosequenza;
          temp2=temp2->next;
          indice++;
        }
      }
    }

    ...che ne dici? potrebbe andare?
    P.s. scusa se commetto errori banali...ma come ti ho detto sono alle prime armi....

  9. #9
    ...che ne dici? potrebbe andare?
    P.s. scusa se commetto errori banali...ma come ti ho detto sono alle prime armi....
    Inseriscilo in un blocco [ CODE ], così è poco leggibile...
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  10. #10

    modifica code

    ...scusami...ho modificato...adesso dovrebbe essere piu leggibile...

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.