Programma in C: Occorrenze su Liste

di il
2 risposte

Programma in C: Occorrenze su Liste

Salve, mi servirebbe un aiuto per un programma in C riguardante le liste. Chiede di scrivere il tipo 'elist' per gli elementi della lista ed il tipo 'plist' come riferimento ad un oggetto elist, infine di scrivere un codice (funzione) che conta quanti elementi di un array siano presenti in una lista concatenata di interi. Non va presa in considerazione più di un'occorrenza, visto che l'array è formato da elementi tutti diversi mentre la lista da elementi possibilmente duplicati. Di seguito trovate il codice (con le richieste esplicite nei commenti a mo' di consegna), ho provato a cercare delle soluzioni ma sono abbastanza limitato dal non poter usare altre librerie se non quella fornita dal professore. Compilando con il compilatore fornito dal sito del prof. i test sono tutti positivi tranne uno:


#include <stdio.h>  /* ora puoi usare NULL */

/* scrivi qui la definizione del tipo "elist" (elemento della lista) con i campi "info" (intero) e "next" (prossimo elemento) */

   typedef struct elem {
        int info;
        struct elem* next;
   } elist;

/* scrivi qui la definizione del tipo "plist" che e' un riferimento ad un oggetto di tipo "elist" */

   typedef elist* plist;

/* puoi scrivere qui eventuali funzioni di supporto che vuoi utilizzare nella funzione compara_array_lista */


int compara_array_lista(int A[], int n, plist p){

    /* Scrivi qui il codice che conta quanti elementi dell'array A lungo n siano
       presenti anche nella lista semplicemente concatenata p di interi.
       L'array A ha tutti elementi distinti, mentre la lista p potrebbe avere elementi
       duplicati. Se un elemento di A appare duplicato in p, deve essere contato una sola volta.  
       Se la lista e' vuota oppure n e' zero allora ritorna zero.  */

    int occ=0;
    int cont=0;
    int i;
    plist s=&*p;


    for(i=0; i<n; i++) {
       while(p!=NULL) {
            if(A[i]==p->info)
              occ++;
            p=p->next;
       }
       if(occ>=1)
         cont++;
       p=s;
    }
    return cont;

}
Grazie in anticipo

2 Risposte

  • Re: Programma in C: Occorrenze su Liste

    Non dovresti resettare occ ad ogni ciclo?
  • Re: Programma in C: Occorrenze su Liste

    candaluar ha scritto:


    Non dovresti resettare occ ad ogni ciclo?
    Sì è vero, basta resettare il valore di occ prima di finire il for! pensavo fosse un problema sull'associazione tra plist e alla fine si è rivelata una stupidaggine! Grazie ancora
Devi accedere o registrarti per scrivere nel forum
2 risposte