typedef struct cel { item info; struct cel * prox; } celula; /* Faça uma função void imprimeLista (celula *inicio); */ void imprimeLista (celula * inicio) { if (inicio != NULL) { printf ("%d ", inicio->info); imprimeLista (inicio->prox); } else printf("\n"); } void imprimeListaIterativo (celula * inicio) { celula * p; for (p = inicio; p != NULL; p = p -> prox) printf("%d ", p->info); printf("\n"); } /* celula * busca (celula *inicio, item x); */ celula * busca (celula * inicio, item x) { if (inicio == NULL || inicio -> info == x) return inicio; return (busca (inicio->prox, x)); } celula * buscaIterativa (celula * inicio, item x) { celula * p; for (p = inicio; p != NULL && p->info != x; p = p->prox); return p; } /* void insereNoInicio (celula **inicio, item x); */ void insereNoInicio (celula **inicio, item x) { celula * novo = malloc (sizeof(celula)); novo->info = x; novo->prox = *inicio; *inicio = novo; } /* na chamada da função, celula * inicio = NULL; ... insereNoInicio (&inicio, 23); */ /* celula * insereNoInicio (celula *inicio, item x); */ celula * insereNoInicioJeito2 (celula *inicio, item x){ celula * novo = malloc(sizeof(celula)); novo->info = x; novo->prox = inicio; return (novo); } /* na chamada da função celula * inicio; ... inicio = insereNoInicioJeito2 (inicio, 23); */ /* Insere no fim da lista */ celula * insereNoFim (celula * inicio, item x) { celula *novo = malloc(sizeof (celula)); celula *atual, *ant; novo->info = x; novo->prox = NULL; for (atual = inicio, ant = NULL; atual != NULL; ant = atual, atual = atual->prox); if (ant != NULL) ant -> prox = novo; else inicio = novo; return (inicio); } celula * insereNoFimRec (celula * inicio, item x) { if (inicio == NULL) { inicio = malloc (sizeof(celula)); inicio->info = x; inicio->prox = NULL; } else inicio->prox = insereNoFimRec (inicio->prox, item x); return inicio; }