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

Exemplo do uso de string em C

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <windows.h>

void cls(void)
{
    COORD coordScreen = {0, 0};
    DWORD cCharsWritten;
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    DWORD dwConSize;
    HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
     GetConsoleScreenBufferInfo(hConsole, &csbi);
    dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
 
    FillConsoleOutputCharacter(hConsole, TEXT(' '),
                   dwConSize, coordScreen, &cCharsWritten);
 
    GetConsoleScreenBufferInfo(hConsole, &csbi);
 
    FillConsoleOutputAttribute(hConsole, csbi.wAttributes,
                               dwConSize, coordScreen, &cCharsWritten);
   
    SetConsoleCursorPosition(hConsole, coordScreen);
}




void lernome(){
     char *nome;
     cls();
     printf("\n Digite um nome \n");
     fflush(stdin);
     gets(nome);
     printf("\n\n");
     printf("%s \n",nome,"\n");
     system("pause");


}//fim procedimento ler nome


int i,sair = 0,opcao;

//programa principal
main(){

 do{ 
      cls();//limpa tela
      printf("Digite uma opção");
      printf("---------------------------------------------\n");
      printf("\n 1 - Adicionar \n");
      printf("\n 2 - Remover \n");
      printf("\n 3 - Buscar\n ");
      printf("\n 5 - Sair\n ");
      printf("\n---------------------------------------------\n");
      /*printf("Digite um nome");
      scanf("%s",nome);
      printf("%s",nome);*/
     
     
      scanf("%d",&opcao);
      if(opcao==5){
         sair = 1;
          
           }else{
                
      switch(opcao)
             {
                case 1:
                      lernome();
                      break;
                    
                case 2:
                   
                    break;

                default:
                     printf("Opcao Invalida!");
                } //end switch
                }//end if else
     
      }while( sair != 1);
      
           
       }