#include <stdio.h>
#include <stdlib.h>
/* Estrutura de um noh de uma lista encadeada */
typedef struct no {
int info;
struct no *prox;
} tipoNo;
/* Esta funcao recebe um inteiro x e uma lista
* encadeada de inteiros. A funcao
* devolve o endereço do noh que contem x.
* Se tal noh nao existe, a funcao devolve NULL. */
tipoNo *buscar(tipoNo *lst, int x) {
tipoNo *p;
p = lst->prox;
while ((p != NULL) && (p->info != x))
p = p->prox;
return p;
}
/* Percorre a lista (travessia), imprimindo seus elementos */
void imprimir(tipoNo *lst) {
tipoNo *p;
p = lst->prox;
while (p != NULL) {
p = p->prox;
}
}
/* Funcao para liberar espaco alocado via malloc
* para cada um dos elementos de uma lista encadeada */
void liberar(tipoNo* lst) {
tipoNo *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(tipoNo *p, int y) {
tipoNo *novonoh; /* Novo noh */
novonoh
= (tipoNo
*) malloc(sizeof(tipoNo
)); /* Aloca espaco para novo noh */
novonoh->info = y; /* Armazena valor do novo noh */
novonoh->prox = p->prox; /* Ajusta o campo prox do novo noh */
p->prox = novonoh; /* 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(tipoNo *p) {
tipoNo *lixo;
lixo = p->prox;
p->prox = lixo->prox;
}
/* Funcao principal */
int main() {
printf("==========================================\n"); printf(" INSERCAO de item em uma lista encadeada \n"); printf("==========================================\n");
/* Declaracao de **ponteiros** para os nohs da lista encadeada */
tipoNo *lista, *pt;
/* Criacao do noh cabeca */
lista
= (tipoNo
*) malloc(sizeof(tipoNo
)); lista->prox = NULL;
/* Inicializa Lista Encadeada */
inserir(lista, 76);
inserir(lista, 34);
inserir(lista, 65);
inserir(lista, 45);
/* Imprime Lista *ANTES* da remocao */
imprimir(lista);
/* Busca elemento 65 */
pt = buscar(lista, 65);
/* Remove elemento 34 (seguinte a 65) */
remover(pt);
/* Imprime Lista *APOHS* remocao */
imprimir(lista);
/* Destroi lista encadeada, liberando espaco */
liberar(lista);
return 0;
}