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