Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Problema lista in c

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760

    Problema lista in c

    Devo fare una lista che restituisca i valori maggiori a n,il codice delle funzioni sembra funzionare,ma vorrei avere,se possibile il parere se è corretto formalmente.Appena posso,invocherò le funzioni e posto il risultato.Grazie in anticipo

    #include <stdlib.h>
    #include <stdio.h>
    -----FUNZIONI-----
    typedef struct nod
    {
    int data;
    struct nod *next;
    } node;

    node *newnode(void)
    {
    return (node *)malloc(sizeof(node));
    }
    /* Dato un intero n>0, costruisce la lista di nodi da 1 ad n */
    node* buildlis_n (int n)
    {
    node *p, *lis;
    lis=NULL;
    while (n>0)

    {
    p=newnode();
    p->data=n;
    p->next=lis;
    lis=p;
    n--;
    }
    return(lis);
    }

    /* Stampa degli elementi di una lista */
    void printlis(node *lis)
    {
    printf("lista risultato\n");
    while (lis != NULL)

    {
    printf(">>>> %d\n", lis->data);
    lis= lis->next;
    }
    }

    -----MAIN----
    main(){





    }

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Evita di usare lo stesso puntatore passato alla printlis per scorrerlo.. potresti trovarti (e ti troverai) con puntatori in posizioni non corrette..

    Usane uno temporaneo..

    ps: usa i tag code o php per postare il codice..

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    ti ringrazio molto per avermi dato il consiglio,ma essendo alle primissime armi su queste cose,ti chiedo,se vuoi e se hai tempo,di indicarmi meglio come potrei fare.Scusa per la domanda ,ma come ti ripeto sono agli inizi e vorrei partire con "idee" giuste.
    Grazie e ciao

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    codice:
    /* Stampa degli elementi di una lista */
    void printlis(node *lis)
    {
         node* tmp = lis;
         printf("lista risultato\n");
         while (tmp != NULL)
         {
             printf(">>>> %d\n", tmp ->data);
             tmp = tmp->next;
         }
    }
    all'uscita così il puntatore lis sarà sempre puntato alla testa della lista..

    attenzione che queste cose sono da primi capitoli del libro che do per scontato tu stia studiando

  5. #5
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    così mi sembra un pò più ordinato, cmq quoto quello detto da Stoicenko, ovvero di usare sempre un puntatore di appogio per scorrere la lista, apparte quando dovrai effettuare la free, ovvero la deallocazione della memoria!

    ti posto il programma completo:
    codice:
    #include <stdlib.h>
    #include <stdio.h>
    
    typedef struct nod {
            int data;
            struct nod *next;
    } node;
    
    node *newnode(void)
    {
       return (node *)malloc(sizeof(node));
    }
    
    /* Dato un intero n>0, costruisce la lista di nodi da 1 ad n */
    node* buildlis_n (int n)
    {
        node *p, *lis;
        lis=NULL;
        while (n>0) {
              p=newnode();
              p->data=n;
              p->next=lis;
              lis=p;
              n--;
        }
        return(lis);
    }
    
    /* Stampa degli elementi di una lista */
    void printlis(node *lis)
    {
         node* tmp;
     
         tmp = lis;
         
         printf("lista risultato\n");
         while (tmp != NULL) {
               printf(">>>> %d\n", tmp->data);
               tmp = tmp->next;
         }
    }
    
    void myFree ( node* top ) 
    {
        node* tmp;
        tmp = top;
        
        while ( top->next != NULL ) {
              tmp = top->next;
              free(top);
              top = tmp;
        }
    }
    
    int main()
    {
        node* head;
        int n;   
           
        printf ("Inserire valore: ");
        scanf  ("%d", &n);   
           
        head = buildlis_n ( n );
        
        printlis ( head );
           
        myFree ( head );   
           
        system ("pause");
        return 0;
    }
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    vi ringrazio enormemente per la cortesia e la gentilezza che avete avuto nel perdere del tempo per darmi dei consigli.Appena posso ne farò un altro simile e magari lo posto.
    Grazie davvero!
    Ciao

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.