#include <stdio.h>
#include <stdlib.h>
typedef int bool;
#define TRUE 1
#define FALSE 0
typedef long TipoIntero;
typedef TipoIntero TipoElemLista;
struct nodoLista {
TipoElemLista info;
struct nodoLista *next;
};
typedef struct nodoLista NodoLista;
typedef NodoLista *TipoLista;
typedef TipoLista TipoInsInteri;
#include "liste.c"
bool UgualeElemento(TipoIntero intero1, TipoIntero intero2)
{
return (intero1 == intero2);
}
#include "listecon.c"
void InitInsInteri(TipoInsInteri *ins)
{
InitLista(ins);
}
bool TestInsiemeVuoto(TipoInsInteri ins)
{
return (TestListaVuota(ins));
}
void InserisciIntero(TipoInsInteri *ins, TipoIntero intero)
{
if (!EsisteInLista(*ins, intero))
InserisciTestaLista(ins, intero);
}
void EliminaIntero(TipoInsInteri *ins, TipoIntero intero)
{
CancellaElementoLista(ins, intero);
}
bool VerificaAppartenenza(TipoInsInteri ins, TipoIntero intero)
{
return (EsisteInLista(ins, intero));
}
void Unione(TipoInsInteri ins1, TipoInsInteri ins2, TipoInsInteri *ins_unione)
{
TipoIntero intero;
CopiaLista(ins1, ins_unione);
while (!TestListaVuota(ins2)) {
TestaLista(ins2, &intero);
if (!EsisteInLista(ins1, intero))
InserisciTestaLista(ins_unione, intero);
RestoLista(&ins2);
}
}
void Intersezione(TipoInsInteri ins1, TipoInsInteri ins2,
TipoInsInteri *ins_int)
{
TipoIntero intero;
InitLista(ins_int);
while (!TestListaVuota(ins1)) {
TestaLista(ins1, &intero);
if (EsisteInLista(ins2, intero))
InserisciTestaLista(ins_int, intero);
RestoLista(&ins1);
}
}
void Complemento(TipoInsInteri ins, TipoInsInteri *ins_compl)
{
printf("ERRORE: la rappresentazione scelta NON permette di implementare\n");
printf(" l'operazione di complemento di un insieme\n");
printf("Viene restituito l'insieme vuoto\n");
InitLista(ins_compl);
}