Lista FIFO

di il
4 risposte

Lista FIFO

Ho giù fatto questa domanda, ma non ne sono venuto a capo, e dato che domani ho l'esame, e potrei incontrare questo tipo di esercizio vi chiedo di aiutarmi a costruire una funzione push che inserisca sempre in testa, che però mi leghi i nodi in maniera che possa stemparli così come li ho inseriti, non al contrario

io avevo pensato di partire dalla LIFO ma distinguendo i due casi (l=0)
da tutti gli altri (l!=0)

void inserisci(L&l,stringa nom,int anni){
     if(l==0){
              L p = new Record;
              strcpy(p->nome,nom);
              p->anni=anni;
              p->next=0;
              l=p;
             
            }
            
     else   { 
               
              L p = new Record;
              
               strcpy(p->nome,nom);
               p->anni=anni;
               p->next=l;
               l=p;
             }
            
come potrei modificare questo codice per ottenere sta LIFO?

4 Risposte

  • Re: Lista FIFO

    Se hai il puntatore che punta al pirmo elemnto ma vuoi stampare partendo dall' ultimo ( cioè il primo che inserisci ) allora hai bisogno di andare a trovare prima l' ultimo elemento
    
    L currentpunt = l ; // l è il puntatore che punta al primo elemento 
    while ( currentpunt->next != 0 )    
        currentupunt = currentpunt->next;  // currentpunt punterà all' ultimo elemento
    
    Una volta che conosci l' ultimo elemento , dovrai stampare currentpunt e ogni volta dovrai fare questo while per trovarti l' elemento che lo punta :
    
    L firstPtr = 0;
    while ( currentpunt != l )
    {
         firstPtr = l;  // puntatore d' appoggio per trovare l' elemento che punta all' ultimo stampato
         cout << currentpunt->val << " ";
         while ( firstPtr->next != currentpunt )
                firstPtr = firstPtr->next;
         currentpunt = firstPtr;
    }
    

    Altrimenti potresti creare una lista doppia nel senso che la struttura del tuo record sarà formata da due puntatori , uno che punterà all' elemento successivo e uno che punterà all' elemento che lo precede e quindi la stampa dovrebbe essere più semplificata ( però devi cambiare anche l' inserimento perchè hai a che fare con due puntatori ) .
  • Re: Lista FIFO

    Alessà c'ho capito poco, se è + semplice mo fai vedere la lista doppia?
  • Re: Lista FIFO

    Non mi chiamo alessà....
    per una lista doppia devi avere questa struttura anche se sarebbe meglio con le classi:
    
    struct Record {
       int val ;
       Record* next,before;
    }
    
    inserimento
    
    inserimento ( L & l, const int valore ) {
       if ( l == 0 ) 
        {
              l = new Record;
              l->val = valore;
              l->next = l->before = 0;
         }
       else
       { 
              L p = new Record;
              p->next = l;
              p->before = 0 ;
              l->before = p;
              l= p ;
        }
    }
    
    Nella stampa ( lo fai te e al limite te lo correggo ) dovrai trovarti l' ultimo puntatore con il primo algoritmo che ti ho incollato prima , e poi la stampa risulta essere identica a quella della LIFO perchè hai il puntatore before che ti rendere la lista biunivoca.
  • Re: Lista FIFO

    Grazie ! sto finendo di ripetere la teoria, dopo completo tutto ,

    scusa se ti ho chiamato alessà . . .
Devi accedere o registrarti per scrivere nel forum
4 risposte