sexta-feira, 13 de maio de 2011

Lista Encadeada em C (Matrícula e nome)

#include <stdio.h>
#include<stdlib.h>
struct registro
{
    long int matricula;
    char nome[81];
    struct registro *next;
};
struct registro *raiz;
void adiciona()
{
    struct registro *novoreg=(struct registro*)malloc(sizeof(struct registro));
    if(novoreg==NULL){printf("Mem%cria insuficiente!",162); exit(1);}
    printf("\nInforme a matr%ccula do funcion%crio: ",161,160);
    scanf("%d",&novoreg->matricula);
    getchar();
    printf("Informe o nome: ");
    gets(novoreg->nome);
    novoreg->next=raiz->next;
    raiz->next=novoreg;
}
void exclui()
{
    struct registro *reg_atual, *reg_ant;
    long int matric;
    reg_atual=raiz->next;
    reg_ant = raiz;   
    printf("\nInforme a matr%ccula do funcion%crio que ser%c exclu%cdo: ",161,160,160,161);
    scanf("%d",&matric);
    while(reg_atual!=NULL)
    {
        if(matric==reg_atual->matricula)
        {
            reg_ant->next=reg_atual->next;
            printf("\nMatr%ccula exclu%cda com sucesso!",161,161);
            free(reg_atual);
            return;
        }
        reg_ant = reg_atual;
        reg_atual=reg_atual->next;
    }       
    printf("Matr%ccula n%co encontrada!\n",161,198);
}
void imp_lista()
{
    struct registro *lista;
    lista=raiz->next;
    if(lista==NULL)
    {
        printf ("\n\n\a\a\a\a\tLista Vazia\n");
        system ("pause");
        exit(1);
    }
    else
    {
        while(lista!=NULL)
        {
            printf("\nMatr%ccula: %d",161,lista->matricula);
            printf("\nFuncion%crio: %s",160,lista->nome);
            lista=lista->next;
        }
    }
}

int main ()
{
    int op=3;
    raiz=(struct registro *)malloc(sizeof (struct registro));
    if(raiz==NULL) exit(1);
    raiz->next=NULL;
    do
    {
        printf("Digite 1 para adicionar um novo registro, 2 para excluir, 3 para listar e 4 para sair: ");
        scanf("%d",&op);
        if(op==1)adiciona();
        else if(op==2)exclui();
        else if(op==3)imp_lista();
        else if(op==4)exit(1);
        printf("\n");
    }while(op!=4);
    free(raiz);
    return 0;
}

2 comentários:

  1. poderia explicar seu codigo?
    bruno_nunes555@hotmail.com

    ResponderExcluir
  2. Poderia explicar seu codigo ?
    josue2011piloes@gmail.com

    ResponderExcluir