#include <stdio.h>
#include <stdlib.h>
/* Estrutura de um noh de uma lista de chamadas perdidas */
typedef struct lostcall {
char *phonename;
char *phonenum;
struct lostcall *prox;
} tipoLostcall;
/* Esta funcao recebe uma string 's' e uma lista encadeada.
* A funcao devolve o endereço do noh que contem 's'.
* Se tal noh nao existe, a funcao devolve NULL. */
tipoLostcall *busca(tipoLostcall *lst, char *s) {
tipoLostcall *p;
p = lst->prox;
while ( (p
!= NULL
) && strcmp(p
->phonename
, s
) != 0 ) p = p->prox;
return p;
}
/* Percorre a lista (travessia), imprimindo seus elementos */
void imprimir(tipoLostcall *lst) {
tipoLostcall *p;
p = lst->prox;
while (p != NULL) {
printf("%s \t %s \n", p
->phonename
, p
->phonenum
); p = p->prox;
}
}
/* Funcao para liberar espaco alocado via malloc
* para cada um dos elementos de uma lista encadeada */
void liberar(tipoLostcall* lst) {
tipoLostcall *f; /* Ponteiro auxiliar */
/* Faz a travessia da lista ateh encontrar o ultimo item. */
while (lst != NULL) {
f = lst;
lst = lst->prox;
}
}
/* Insere noh em uma lista encadeada */
void inserir(tipoLostcall *lst, char *name, char *number) {
tipoLostcall *novo_noh; /* Novo noh */
novo_noh
= (tipoLostcall
*) malloc(sizeof(tipoLostcall
)); /* Aloca espaco para novo noh */
novo_noh->phonename = name; /* Armazena nome do novo contato */
novo_noh->phonenum = number; /* Armazena numero do novo contato */
novo_noh->prox = lst->prox; /* Ajusta o campo prox do novo noh */
lst->prox = novo_noh; /* Faz o noh antigo apontar para o novo noh */
}
/* Esta funcao recebe o endereco 'p' de um noh
* de uma lista encadeada, e remove da
* lista o noh 'p->prox'. A funcao supoe que
* p != NULL e p->prox != NULL. */
void remover(tipoLostcall *p) {
tipoLostcall *lixo;
lixo = p->prox;
p->prox = lixo->prox;
}
/* Funcao principal */
int main()
{
printf("==========================================\n"); printf(" REMOCAO de item em uma lista encadeada \n"); printf("==========================================\n");
/* Declaracao de **ponteiros** para os nohs da lista encadeada */
tipoLostcall *lista, *pt;
/* Criacao do noh cabeca */
lista
= (tipoLostcall
*) malloc(sizeof(tipoLostcall
)); lista->prox = NULL;
/* Inicializa Lista Encadeada */
inserir(lista, "Lisbela", "99887766");
inserir(lista, "Hildegardo", "99881234");
inserir(lista, "Astrogilda", "98987676");
inserir(lista, "Hermengarda", "99998888");
inserir(lista, "Hermenegildo", "91223344");
/* Imprime Lista *ANTES* da insercao */
imprimir(lista);
/* Busca chamada de "Astrogilda" */
pt = busca(lista, "Astrogilda");
/* Remove chamada de "Hildegardo" (seguinte a "Astrogilda") */
remover(pt);
/* Imprime Lista *APOS* insercao */
imprimir(lista);
/* Destroi lista encadeada, liberando espaco */
liberar(lista);
return 0;
}