Lista encadeada
#include
#include
typedef struct nodo{ char nome[30]; char fone[15]; struct nodo *anterior, *proximo;
}lista;
lista *primeiro, *atual, *anterior, *proximo, *gravar;
void insere(char tipo){
if(primeiro == NULL){ primeiro = malloc(sizeof(lista)); primeiro->proximo = gravar; primeiro->anterior = gravar; gravar->anterior = primeiro; gravar->proximo = primeiro;
}
else{ if(tipo == 'M'){ atual = primeiro->proximo;
while(strcmp(gravar->nome,atual->nome) > 0){ if(atual != primeiro) atual = atual->proximo; else break;
}
anterior = atual->anterior;
proximo = atual; /* o endereço de atual vai para proximo */
anterior->proximo = gravar; /* Os dados contidos em "gravar" serão inseridos entre */ gravar->anterior = anterior; /* as os nodos referencia "anterior" e "proximo" */ gravar->proximo = proximo; proximo->anterior = gravar;
}
if(tipo == 'F'){ anterior = primeiro->anterior; proximo = primeiro;
anterior->proximo = gravar; /* Os dados contidos em "gravar" serão inseridos entre */ gravar->anterior = anterior; /* as os nodos referencia "anterior" e "proximo" */ gravar->proximo = proximo; proximo->anterior = gravar;
}
}
}
void NovoReg(void){ system("cls"); gravar = malloc(sizeof(lista));
printf("Nome: "); gets(gravar->nome); printf("\nFone: "); gets(gravar->fone); insere('M'); /* chamada do procedimento de inserção */
/* 'M' corresponde a inserção no meio ( acarretando em encadeamento ordenado) e */
/* 'F' corresponde a inserção no fim */
printf("\nSeu registro foi incluido!\n\n"); system("pause"); }
void listar(void){ char op;
if(primeiro == NULL){ system("cls"); printf("Nenhum registro armazenado...\n\n"); system("pause"); return;
}
else{
atual = primeiro->proximo;
do{ system("cls"); printf("Pressione + e - para alternar entre os registros e para sair.\n\n");
printf("Nome: %s\n\nFone: