Liste

di il
27 risposte

Liste

Controllare se un numero di una lista si ripete k volte e inserirlo in una seconda lista.Ragazzi potete aiutarmi con questo codice.Grazie in anticipo
#include <stdio.h>
#include <stdlib.h>
 
struct elementi{
int x;
struct elementi *next;
};
 
struct elementi *crea(int x){
struct elementi *e=(struct elementi *)malloc(sizeof(struct elementi));
e->x=x;
e->next=NULL;
return e;
};
 
struct elementi *coda(struct elementi *top,int x){
if(top==NULL){
    struct elementi *e=crea(x);
    top=e;
}
else
    top->next=coda(top->next,x);
return top;
};
 
struct elementi *controllo(struct elementi *top,int k,struct elementi *top2){
    int c,volte=0;
    while(top!=NULL){                  //scorro la lista e assegno alla variabile c un valore di quest ultima                                                      
    c=top->x;                                            
for(;top!=NULL;top=top->next){               // col for controllo quante volte è presente questo valore
    if(c==top->x)
        volte++;
}
    if(volte==k){                          // se è presente un numero k di volte allora inserisco quel valore    
        top2=coda(top2,c);                              in una seconda lista
        volte=0;
    }
    top=top->next;                         // assegno a top l'elemento successivo.Il while ricomincia dinuovo
}                                            e cosi facendo i numeri presenti k volte li dovrebbe inserire      
return top2;                                 in una nuova lista
    }
 
 
void stampa(struct elementi *top){
if(top!=NULL){
    printf("il valore %d\n",top->x);
    stampa(top->next);
}
}
int main()
{
    int n;
    printf("inserisci la grandezza della lista\n");
    scanf("%d",&n);
    struct elementi *top=NULL;
    int i,m;
    for(i=0;i<n;i++){
        printf("inserisci il numero\n");
        scanf("%d",&m);
        top=coda(top,m);
    }
    printf("numero di ripetizioni?\n");
    int k;
    scanf("%d",&k);
    struct elementi *top2=NULL;
    top2=controllo(top,k,top2);
stampa(top2);
    return 0;
}

27 Risposte

  • Re: Liste

    Il problema specifico qual è? Devi fare una domanda precisa, non chiedere un "aiuto generico" ...
  • Re: Liste

    Il problema che riscontra il programma è in quella funzione controllo,purtroppo non so quale sia.La traccia del problema l'ho detta in pratica dovrei vedere quale numero si ripete un k di volte e inserirlo in una seconda lista
  • Re: Liste

    La traccia di un problema non basta in un forum. Qui almeno non si fornisce la "soluzione completa" (non si fanno gli esercizi per gli altri) ma si spiegano eventuali problemi e si risolvono insieme.

    Adesso, qual è esattamente il problema e in quale parte del codice? L'hai scritto tu il codice? Saprai spiegare cosa hai fatto e cosa non va ...
  • Re: Liste

    Sisi l'ho scritto io il codice e infatti non ti sto chiedendo di farmi l'esercizio , ma semplicemente volevo sapere se voi riuscivate ad individuare l'errore.Ho anche scritto che l'errore sta in quel while della funzione controllo.Il programma viene compilato ed eseguito, ma ad un certo punto si blocca e termina
  • Re: Liste

    antonx ha scritto:


    sisi l'ho scritto io il codice e infatti non ti sto chiedendo di farmi l'esercizio , ma semplicemente volevo sapere se voi riuscivate ad individuare l'errore.Ho anche scritto che l'errore sta in quel while della funzione controllo.Il programma viene compilato ed eseguito, ma ad un certo punto si blocca e termina
    Scusa, ma lo stai dicendo solo adesso che il problema è nel while e che il programma si blocca.
  • Re: Liste

    Va bene comunque non fa niente ,senti mica riesci ad individuare l'errore perfavore?perchè io davvero non capisco dove ho sbagliato
  • Re: Liste

    Penso sia proprio a causa del fatto che ti muovi attraverso la lista sia con il while che con il for.

    La for ti porta alla fine della lista e quando cicli con la while sei già alla fine.
  • Re: Liste

    Quindi in pratica dovrei mettere al posto del while un for mantenendo le operazioni successive?
  • Re: Liste

    Perché cambiare while con for? Non ti ho detto questo ... Semplicemente devi usare due puntatori.
  • Re: Liste

    Ah scusami non avevo capito.In pratica la mia idea iniziale era quella che col while mi prendevo un elemento della lista,e nel for invece, facevo controllare questo elemento con ogni singolo componente della lista.Però non ho capito ora come dovrei agire
  • Re: Liste

    Con due puntatori, uno per la while e uno per la for ... te l'ho scritto poco fa ...
  • Re: Liste

    Si ma non ho capito cosa dovrebbero fare questi due puntatori
  • Re: Liste

    Hai capito che se usi top sia nel while che nella for hai problemi? Quindi nella for usa un altro puntatore alla lista per scorrerla in modo che il puntatore top possa essere usato nella while.
  • Re: Liste

    Ho capito,grazie tante
Devi accedere o registrarti per scrivere nel forum
27 risposte