terça-feira, 10 de maio de 2011

Lista Duplamente Encadeada

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h.>



// Estrutura da lista encadeada
typedef struct ListaDupEnc {
       
        char nomek[10];
        int tel;
        struct ListaDupEnc *ant; //Definição dos ponteiros anterior e prox
        struct ListaDupEnc *prox;
       
        } ListaDupla;

ListaDupla *L; // O L é um ponteiro para a lista duplamente encadeada

ListaDupla * cria_lista()
{
 return NULL;         
}

int lista_vazia(ListaDupla *L)
{
 return(L==NULL);  
}

ListaDupla * insere_lista(ListaDupla *L,int TEL,char NOME[10])
{
          
          
ListaDupla *NovaL= (ListaDupla*) malloc (sizeof(ListaDupla));
          
           NovaL->tel=TEL;
          
           strcpy(NovaL->nomek,NOME);
           if(L==NULL)
            {
                       NovaL->ant=NULL;
                       NovaL->prox=NULL;
                      
           }//Fecha if
           else
           {
               NovaL->prox=L;
               NovaL->ant=NULL;
           }//Fecha else
          
           system("pause");
           return NovaL;
          
}

void exibe_lista(ListaDupla *L)
{
          
 ListaDupla *aux;
                               printf("\t\tNome\t\tTel\n");
 for(aux=L;aux!=NULL;aux=aux->prox)
 {
                             
                               printf("\t\t%s",aux->nomek);
                               printf("\t\t%d\n",aux->tel);
                                                           
 }
 system("pause");
          
}

ListaDupla * busca_tel(ListaDupla *L,int TEL,int d)
{
      ListaDupla *aux;
      ListaDupla *ant=NULL;
                              
 for(aux=L;aux!=NULL;aux=aux->prox)
 {

     if(aux->tel==TEL)
     {
                      printf("\t\tNumero encontrado\n");
                      printf("\t\tNome\t\tTel\n");
                      printf("\t\t%s",aux->nomek);
                      printf("\t\t%d\n",aux->tel);
                      if(d==1)
                      {
                          if(ant==NULL)
                          {
                            L=aux->prox;
                            }
                           
                           else
                                                    
                            aux->ant->prox= aux-> prox;
                            aux->prox->ant= aux-> ant;
     
                     }// FECHA D==1
      free(aux);
     system("pause");
    return L ;
   
     }//Fecha IF busca tel

  }// FECHA FOR
   



}// FECHA FUNCAO LISTA


 /*ListaDupla * busca_nome(ListaDupla *L,char NOME[10],int d)
{
      ListaDupla *aux;
                              
 for(aux=L;aux!=NULL;aux=aux->prox)
 {
     if(!strcmp(aux->nomek,NOME)
     {
                      printf("\t\tNome encontrado\n");
                      printf("\t\tNome\t\tTel\n");
                      printf("\t\t%s",aux->nomek);
                      printf("\t\t%d\n",aux->tel);
  if(d==1)
                      {
                                                 
                                                  if(L==aux)
                                                  L=aux->prox;
                                                  else
                                                  aux->ant->prox=aux->prox;
                                                 
                                                  if (aux->prox!=NULL)
                                                  {      
                                                  aux->prox->ant=aux->ant;
                                    
                                                    system("pause");
                                     free(aux);
                                                    return L;
                                                   
                                                     }
                      }
   
     }

  }
system("pause");
return L;
}
*/

int main()
{
    int escolha=0,escolha_b=0,telefone=0;
    char nome[10];
    ListaDupla *listaD =cria_lista();
   
    do{
       system("cls");
          printf("\n\n\t\t+--------------------------------+\n");
          printf("\t\t|             MENU               |\n");
          printf("\t\t+--------------------------------+\n");
          printf("\t\t|\t[1] - Cadastrar          |\n");
          printf("\t\t|\t[2] - Exibe              |\n");
          printf("\t\t|\t[3] - Buscar             |\n");
          printf("\t\t|\t[4] - Deletar campo      |\n");
          printf("\t\t|\t[5] - Creditos           |\n");
          printf("\t\t|\t[9] - Sair               |\n");
          printf("\t\t+--------------------------------+\n\n\n");
   printf("Opcao: ");
   scanf("%d",&escolha);
  
   switch(escolha)
   {
                  case 1:
                      
                       printf("Digite um nome:  ");
                       fflush(stdin);
                      gets(nome);
                      
                       printf("Digite um telefone:  ");
                       scanf("%d",&telefone);
                       listaD=insere_lista(listaD,telefone,nome);
                       break;
                      
                  case 2:
                       if(!lista_vazia(listaD))
                       exibe_lista(listaD);
                       else
                       {
                       printf("\n\nNao ha nenhum cadastro registrado...\n\n");
                       system("pause");
                       }
                       break;
                  case 3:
                       printf("[1]-Busca por telefone\n");
                       printf("[2]-Busca por nome\n");
                       scanf("%d",&escolha_b);
                       if(escolha_b==1)
                       {
                       printf("Digite o numero que voce deseja buscar\n");
                       scanf("%d",&telefone);
                       busca_tel(listaD,telefone,0);
                       }
                       else if(escolha_b==2)
                       {
                       printf("Digite o nome que voce deseja buscar\n");
                       scanf("%d",&nome);
                       //busca_nome(listaD,nome,0);
                       }
                       break;
                      
                   case 4:
                       
                       printf("[1]-Deletar por telefone\n");
                       printf("[2]-Deletar por nome\n");
                       scanf("%d",&escolha_b);
                       if(escolha_b==1)
                       {
                       printf("Digite o numero que voce deseja deletar\n");
                       scanf("%d",&telefone);
                       listaD=busca_tel(listaD,telefone,1);
                       }
                       else if(escolha_b==2)
                       {
                       printf("Digite o nome que voce deseja deletar\n");
                       scanf("%d",&nome);
                     //  listaD=busca_nome(listaD,nome,1);
                       }
                
                      
}//Fecha o switch
}while(escolha!=9);//Fecha o Do..While
}//Fecha o main

Nenhum comentário:

Postar um comentário