Sei sulla pagina 1di 4

typedef int TipoElemento; typedef struct EL { TipoElemento info; struct EL * prox; } ElemLista; typedef ElemLista * ListaDiElem; ********************************************************** ListaDiElem

Inizializza( void ) { return NULL;} int ListaVuota( ListaDiElem lista ) { return lista == NULL;} ListaDiElem InsInTesta ( ListaDiElem lista, TipoElemento elem ) { ListaDiElem punt; punt = (ListaDiElem) malloc(sizeof(ElemLista)); punt->info = elem; punt->prox = lista; return punt;} int Dimensione(ListaDiElem lista) { int count = 0; while( ! ListaVuota(lista) ) { lista = lista->prox; count++; } return count;} int DimensioneRic(ListaDiElem lista) { if( ListaVuota(lista) ) return 0; return 1 + DimensioneRic(lista->prox);} ListaDiElem InsInFondo( ListaDiElem lista, TipoElemento elem ) { ListaDiElem punt, cur = lista; punt = (ListaDiElem) malloc(sizeof(ElemLista)); punt->prox = NULL; punt->info = elem; /*Crea il nuovo nodo */ if (ListaVuota(lista)) { return punt;} /* => punt la nuova lista */ else { while(cur->prox != NULL) { /* Trova l'ultimo nodo */ cur = cur->prox;} cur->prox = punt; /*Aggancio all'ultimo nodo */ } return lista;} ListaDiElem InsInOrd( ListaDiElem lista, TipoElemento elem ) {

ListaDiElem punt, puntCor = lista, puntPrec = NULL; while(puntCor != NULL && elem > puntCor->info){ puntPrec = puntCor; puntCor = puntCor->prox; } punt = (ListaDiElem)malloc(sizeof(ElemLista)); punt->info = elem; punt->prox = PuntCor; if (puntPrec != NULL) { puntPrec->prox = punt; return lista;} else return punt;} } ListaDiElem CreaElemLista ( TipoElemento elem ){ ListaDiElem lista = (ListaDiElem)malloc(sizeof(ElemLista)); if (!ListaVuota(lista)) { lista->info = elem; lista->prox = NULL; } } ListaDiElem CopiaLista (ListaDiElem lista) { ListaDiElem testa = NULL; if(ListaVuota(lista)) return NULL; else { testa = CreaElemLista(lista->info); if (ListaVuota(testa)) return NULL; testa->prox = CopiaLista(lista->prox); } return testa; } int VerificaPresenza (ListaDiElem lista, TipoElemento elem) { ListaDiElem punt; if(ListaVuota(lista)) return 0; else { punt=lista; if (punt->info == elem) return 1 else return VerificaPresenza(punt->prox, elem) } } void VisualizzaLista( ListaDiElem lista ) { if ( ListaVuota(lista) ) printf(" --/\n"); else if ( ListaVuota(lista->prox) ) printf(" %d --/\n", lista->info); else { printf(" %d -->", lista->info); VisualizzaLista( lista->prox );

} } void VisualizzaListaRovesciata( ListaDiElem lista ) { if ( ListaVuota(lista) ) printf(" /-- "); else if ( ListaVuota(lista->prox) ) printf(" /-- %d", lista->info); else { VisualizzaListaRovesciata( lista->prox ); printf(" <-- %d", lista->info); } } ListaDiElem Cancella( ListaDiElem lista, TipoElemento elem ) { ListaDiElem puntTemp; if( ! ListaVuota(lista) ) if( lista >info == elem ) { puntTemp = lista >prox; free( lista ); return puntTemp; } else lista >prox = Cancella( lista >prox, elem ); return lista; } ListaDiElem CancellaTutti( ListaDiElem lista, TipoElemento elem ) { ListaDiElem puntTemp; if( ! ListaVuota(lista) ) if( lista >info == elem ) { puntTemp = lista >prox; free( lista ); return CancellaTutti(puntTemp, elem); } else lista >prox = Cancella( lista >prox, elem ); return lista; } void DistruggiLista( ListaDiElem lista ) { ListaDiElem temp; while( lista != NULL ) { temp = lista >prox; free( lista ); lista = temp; } } void DistruggiListaRic( ListaDiElem lista ) { if ( ! ListaVuota(lista) ) DistruggiListaRic( lista >prox ); free( lista ); }

ListaDiElem ReverseDiLista( ListaDiElem lista ) { ListaDiElem temp, prec = NULL; if( ! ListaVuota(lista) ) { while( lista >prox != NULL ) { temp = prec; prec = lista; lista = lista >prox; prec >prox = temp; } lista >prox = prec; } return lista; } ListaDiElem CercaMax ( ListaDiElem lista) { ListaDiElem l1, l2; if ( ListaVuota(lista)) return lista; if ( lista->prox == NULL) return lista; l1 = lista; l2 = CercaMax (Lista->prox); if (l1->info > l2->info) return l1; return l2; } ListaDiElem PrimoPari( ListaDiElem lista ) { if ( lista == NULL || lista->info % 2 == 0 ) return lista; return PrimoPari (lista->prox); } void EliminaElem ( ListaDiElem lista, TipoElemento elem ) { ListaDiElem aux; if( elem > O && lista != NULL ) { aux = lista; lista = lista->next; free(aux); EliminaEl(lista, i - 1); } }