Publicidade cabeçário

segunda-feira, 25 de março de 2013

Estrutura de Dados - Lista Dinâmica com Menu

Fala pessoal, estão chegando as temidas avaliações. Bom hoje eu vou postar o nosso trabalhinho que deu trabalho ein, vamos combinar! Agradecendo em especial o Lysandro que me ajudou muito principalmente com a lógica, o Piveta e o Filipe que discutiram e analisaram junto comigo os meios lógicos para conseguir achar uma saída! 
Pra você que passou o fds carregando pedra
fonte da imagem|: culturadetravesseiro.blogspot.com



#include<stdio.h>

#include<windows.h>
#include<conio.h>

struct no
{
int nValor;
no *pProximo;
}*pCabeca;
          
void CriarListaVazia(){
pCabeca = NULL;
    printf("\n\tA lista foi criada com sucesso!");
}// fim CriarListaVazia

void ExiberPrimeiroElemento(){
     printf("\n\t O primeiro elemento e %d",pCabeca->nValor);
     }//fim ExiberPrimeiroElemento
     
void DeletarPrimeiro(){
     no *pAux;
     pAux = pCabeca;
     pCabeca = pCabeca->pProximo;
     free(pAux);
     printf("\n\nElemento deletado no inicio com sucesso!! \n\n ");
     }//fim DeletarPrimeiro
     
void DeletarUltimo(){
     no *pAux,*pUltimo;

        pAux = pCabeca;
        pUltimo = pCabeca;
        while(pAux->pProximo!= NULL){
pUltimo = pAux;
        pAux = pAux->pProximo;
        }
        pUltimo->pProximo = NULL;
        free(pAux);
        printf("\n\nElemento inserido no final com sucesso!! \n\n ");
     }//fim DeletarUltimo
     
void DeletarEscolha(){
     no *pAux,*pEscolha;
     int iCont=1,iNo;
     
     printf("\n\t Digite o NO a ser deletado\n\t");
     scanf("%d",&iNo);
     pAux = pCabeca;
     
     if(iNo == 1){
            DeletarPrimeiro();
     }else{
     while(iCont != iNo){
        pEscolha = pAux;
        pAux = pAux->pProximo; 
        iCont++;
        } 
        if(iCont == iNo){
         free(pAux);
         }   
         pEscolha -> pProximo = pAux ->pProximo;       
        }                    
     }//fim DeletarEscolha

     
void ExiberUltimoElemento(){
     no *pAux;
     
     pAux = pCabeca;
while(pAux->pProximo != NULL)
{
pAux = pAux->pProximo;
}    
     printf("\n\t O ultimo elemento e %d",pAux->nValor);
  }//fim ExiberUltimoElemento

void ExibirTamanho(){
     no *pAux;
     int iCont=1;
     
     pAux = pCabeca;
while(pAux->pProximo != NULL)
{
pAux = pAux->pProximo;
iCont++;
        }
     printf("\n\t A lista possui %d elementos",iCont);
     }//fim ExibirTamanho
           
void InserirInicio(){
     no *pNovo;
     int nV;
     
     printf("\n\t Digite o valor: ");
scanf("%d",&nV);
 
pNovo = (no*) malloc(sizeof(no));
pNovo -> nValor = nV;
 
     if(pCabeca == NULL){
  pCabeca = pNovo;
pNovo->pProximo = NULL;
      }else{
            pNovo->pProximo = pCabeca;  
            pCabeca=pNovo;
            }
     printf("\n\nElemento inserido no comeco com sucesso!! \n\n ");
     }//fim InserirInicio
     
void InserirFinal(){
no *pNovo, *pAux;
int nV;
printf("\n\t Digite o valor: ");
scanf("%d",&nV);
pNovo = (no*) malloc(sizeof(no));
pNovo->nValor = nV;
pNovo->pProximo = NULL;
if(pCabeca == NULL){
pCabeca = pNovo;
}else{
pAux = pCabeca;
while(pAux->pProximo != NULL){
pAux = pAux->pProximo;
}//fim while
pAux->pProximo = pNovo;
}//fim if
printf("\n\nElemento inserido no final com sucesso!! \n\n ");
}//fim InserirFinal

void Imprime(){
no *pAux;
int nCont=0;
pAux = pCabeca;
printf("\n\nPercorrendo a Lista e exibindo os valores \n\n ");
while(pAux != NULL){
nCont++;
printf("\n elemento %d : %d",nCont,pAux->nValor);
pAux = pAux->pProximo;
}//fim while
}// fim Imprime

void ListaVazia(){
     if(pCabeca == NULL) printf("\n\t A lista esta vazia no momento!!");
     else printf("\n\t A lista ja possue elementos!!");
     }// fim ListaVazia

Aqui toda ação que vai ocorrer na nossa lista dinâmica, posteriormente iremos fazer um menu que vai "chamar" e executar a ação! 


main(){
int nOpc;
do{
printf("----------------------- Menu --------------------------------");
printf("\n\n\t1 - Criar Lista");
printf("\n\t2 - Inserir no Inicio da Lista");
printf("\n\t3 - Inserir no final da Lista");
printf("\n\t4 - Exibir se a lista esta vazia");
printf("\n\t5 - Exibir os dados do primeiro elemento");
printf("\n\t6 - Exibir os dados do último elemento");
printf("\n\t7 - Exibir todos os valores da lista");
printf("\n\t8 - Exibir o tamanho da lista");
printf("\n\t9 - Eliminar o primeiro elemento");
printf("\n\t10 - Eliminar o ultimo elemento");
printf("\n\t11 - Eliminar o NO que possua o codigo digitado pelo usuário");
printf("\n\t12 - Inverte a Lista");
printf("\n\t0 - Sair");

printf("\n\nDigite a opcao desejada: ");
scanf("%d",&nOpc);

switch (nOpc){
case 0:
                 printf("\n\nObrigado por utilizar o programa\n\n Pressione ENTER para sair...");
                 break;
            case 1:
CriarListaVazia();
printf("\n\nPressione ENTER para continuar...\n\n");
break;
case 2:
InserirInicio();
printf("\n\nPressione ENTER para continuar...\n\n");
break;
case 3:
InserirFinal();
printf("\n\nPressione ENTER para continuar...\n\n");
break;
case 4: 
                 ListaVazia();
                 printf("\n\nPressione ENTER para continuar...\n\n");
                 break;
            case 5:
                 ExiberPrimeiroElemento();
                 printf("\n\nPressione ENTER para continuar...\n\n");
                 break;
            case 6:
                 ExiberUltimoElemento();
                 printf("\n\nPressione ENTER para continuar...\n\n");
                 break;
   case 7:
                 Imprime();
                 printf("\n\nPressione ENTER para continuar...\n\n");
                 break;
            case 8:
                 ExibirTamanho();
                 printf("\n\nPressione ENTER para continuar...\n\n");
                 break;
            case 9:
                 DeletarPrimeiro();
                 printf("\n\nPressione ENTER para continuar...\n\n");
                 break;
            case 10:
                 DeletarUltimo();
                 printf("\n\nPressione ENTER para continuar...\n\n");
                 break;
            case 11:
                 DeletarEscolha();
                 printf("\n\nPressione ENTER para continuar...\n\n");
                 break;
            default:
                printf("\n\nOpcao Invalida \n");  
                break;  
} // fim switch
getch();
system("cls");
       }while(nOpc != 0);
}//fim main

Aqui nosso main com o menu
Exemplo do Menu de Lista Dinâmica
Exemplo do Menu de Lista Dinâmica
fonte da imagem: bdfatec.blogspot.com.br
Bom é isso ai pessoal, pra quem não tinha feito tá na mão, divirtam-se porque quinta o chicote estrala... abraço bons estudos!

para saber mais sobre estrutura de dados:

clique aqui ==> Estrutura de Dados - Pilha

fonte: < Jean Daniel - LPII >
adaptado: arroyo, gabriel


Gostou do blog? Então segue =D 
Gostou da postagem? Então comenta ;DDD 
Fique por dentro das atualizações 

6 comentários:

  1. Ótimo post chuck, estou pensando em fazer um post também, de como fazer uma lista encadeada, porém no linux, já que não tem a windows.h, rsrsrsr... Abraços

    ResponderExcluir
    Respostas
    1. Demorou... em Linux o negocio é mais embaixo pelo que você tava falando... kkkk tenso demais chessus! Manda bala manolo é nois! abraço vlw

      Excluir
  2. Respostas
    1. É preto se achou o que que era doce? HIAEOIOEIAOHIAEOAEOHAOEI....

      Excluir
  3. nooossaaa, muito obrigada, se nao fosse vc ia tirar zero na prova, estava morrendo de medo kkkkk. Valeu mesmo.

    ResponderExcluir