Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    27

    [C] Portare il primo elemento di una lista in ultima posizione

    mamma mia ma come si fa!!!

    Definire una procedura ricorsiva FirstLast che, data una lista semplice di interi, porta in ultima posizione il primo elemento.

    Di sicuro sarà del tipo:

    Codice PHP:
    void FirstLast(ListaInteri l) {
        if(
    l==NULL)
            return;
        
    ListaInteri temp;
        
    //codice da completare
        
    FirstLast(l->next);


  2. #2
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    Perchè ricorsiva? Devi shiftare tuttigli elementi?
    se l è un puntatore al primo elemento (beh, non ci sono molte alternative, o è un puntatore o è un puntatore a puntatore) memorizzi il primo, vai sul secondo e con un altro puntatore di supporto lo sposti indietro di una posizione finchè l non è NULL quindi ci sbatti dento il temp...

    codice:
    void FirstLast(ListaInteri l) {
        if(l==NULL)
            return;
        int temp; 
        temp=l->membro;
        ListaInteri *previous=l;
        l=l->next;    
        while(l!=NULL){
           previous->membro=l->membro; 
           previous=previous->next;
           FirstLast(l->next);
        }
        previous->membro=temp;
    }
    Non so se funzioni ma questo dovrebbe essere il procedimento corretto per quanto vuoi fare...
    Ovviamente al posto di membro ci va il nome del membro della tua struttura.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    27
    non devo shftare tutti gli elementi ma solo il primo
    ricorsiva xkè è la consegna.. è un quesito universitario....
    ListaInteri è un puntatore:

    Codice PHP:
    typedef struct Blocchetto {
        
    int valore;
        
    struct Blocchetto *next;
    }
    Blocchetto;

    typedef struct BlocchettoListaInteri

  4. #4
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    boh, se devi spostare il primo elemento in fondo o shifti tutti gli elementi di una posizione (e qua viene utile la funzione ricorsiva, ma anche no volendo, c'è il while...) o lo fai ricorsivamente o pigli il primo, lo memorizzi, vai in fondo, memorizzi il secondo, piazzi il primo, ritorni in cima e metti l'ultimo...

    Se ti è stata chiesta ricorsiva sarà come l'ho fatta io... non vedo alternative. Tranne per il fatto che avevo fatto un errore: devi passare già il puntatore settato al secondo elemento

    codice:
    void FirstLast(ListaInteri l->Next) {
        if(l==NULL)
            return;
        int temp; 
        temp=l->membro;
        ListaInteri *previous=l;
        while(l!=NULL){
           previous->membro=l->membro; 
           previous=previous->next;
           FirstLast(l->next);
        }
        previous->membro=temp;
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    27
    il tuo codice da errore

  6. #6
    Prova con questa:
    codice:
    void Ripeti(ListaInteri *l, ListaInteri *testa)
    {
      if (l->next == NULL)
         {
         l->next = testa;
         testa = testa->next;
         return;
         }
      Ripeti (l->next,testa);
      return;
    }
    Vedi che nn l'ho provata
    Experience is what you get when you don’t get what you want

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    27
    Ascoltami vecchio, la funzione deve accettare un parametro solo....

  8. #8

    Re: [C] Portare il primo elemento di una lista in ultima posizione

    Originariamente inviato da ILDaTcH
    mamma mia ma come si fa!!!

    Definire una procedura ricorsiva FirstLast che, data una lista semplice di interi, porta in ultima posizione il primo elemento.

    Di sicuro sarà del tipo:

    Codice PHP:
    void FirstLast(ListaInteri l) {
        if(
    l==NULL)
            return;
        
    ListaInteri temp;
        
    //codice da completare
        
    FirstLast(l->next);

    io dico la mia...
    al posto del commento metti:

    if ( l->next->next == NULL ) //se il next del prossimo elemento è la fine della lista
    l->next = l; //allora il next (l'ultimo elemento in lista) è uguale ad l

    ...spero ti sia d'aiuto!!
    ricordate:
    "...un Vero Programmatore non ha paura di usare GOTO..."


  9. #9
    Ascoltami vecchio, la funzione deve accettare un parametro solo.
    vuole essere un offesa ?
    Non mi sembrava fosse specificato prima
    Experience is what you get when you don’t get what you want

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    27
    Non voleva essere un'offesa, vecchio è un modo simpatico per rifersi a una persona.
    Chiedo scusa in gni caso se sono stato frainteso.

    Cmq nel primo post c'era un abbozzo di definizione della funzione, e accettava un solo parametro

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.