Publicidade cabeçário

segunda-feira, 22 de abril de 2013

Estrutura de Dados - Pilha

Bom pessoal, vamos continuar com nossas postagens magnânimas sobre estrutura de dados, depois das listas dinâmicas simples e duplas, agora vamos as pilhas


Pra você que ta achando que é dessa pilha que a gente está falando =D
Pra você que ta achando que é dessa pilha que a gente está falando =D
fonte da imagem: bdfatec.blogspot.com.br


CONCEITOS

Para certas aplicações, tornam-se úteis estruturas de dados, constituídas por conjuntos de elementos organizados NÃO pelos VALORES DOS DADOS, mas em função de um determinado CRITÉRIO QUE REGULAMENTA A ENTRADA E A SAÍDA dos dados na estrutura.


FILO: First In, Last Out – O primeiro a entrar na estrutura é o último a sair.


Uma pilha é um tipo especial de lista linear em que todas as operações de inserção, remoção ou consulta são realizadas em uma só extremidade, denominada TOPO. Agora se você está procurando uma fila, em outras palavras, o primeiro objeto inserido é também o primeiro a ser removido. Clique aqui para saber mais <<FIFO(First In, First Out)>>

Funcionamento

Cada vez que um novo elemento deve ser inserido na pilha, ele é colocado no seu topo; e em qualquer momento, apenas aquele posicionado no topo da pilha pode ser removido. Percebemos claramente um padrão de comportamento que indica que o primeiro elemento a ser inserido (empilhado), é o último elemento a ser removido.


Funcionamento pilha FIFO
Funcionamento pilha FILO
fonte da imagem: http://www.linhadecodigo.com.br
Programa

Certo agora vamos ao exercício proposto em sala. Criar uma pilha (FILO) que contenha os seguintes itens:

  • Inserir um elemento;
  • Exibir a pilha inteira;
  • Exibir o último elemento;
  • Exibir o primeiro elemento;
  • Eliminar um elemento;
  • Testar se a pilha está vazia.

Essa parte iremos incluir as bibliotecas e criar a estrutura da pilha

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

struct noPilha
{
int iInfo;
noPilha *pAnt;
}; noPilha *topo=NULL;

Agora iremos inserir os métodos para realizar as operações do menu

void inserir(){
     int valor;
     
     printf("\n\t Digite um valor qualquer.:");
     scanf("%d",&valor);
     noPilha *novo = (noPilha*)malloc(sizeof(noPilha));
     novo -> iInfo = valor;
     novo -> pAnt =  topo;
     topo = novo;
     printf("\n\t Valor inserido com sucesso!!");
     }//fim inserir
     
void imprime(){
noPilha *pAux=topo;
    
if(topo == NULL)
printf("\n\nA lista esta vazia \n\n ");
else{
printf("\n\nPercorrendo a Lista e exibindo os valores \n\n ");
while(pAux != NULL){
printf("\n elemento: %d",pAux->iInfo);
pAux = pAux->pAnt;
}//fim while
   }//fim if
}// fim Imprime

void pilhaVazia(){
     if(topo == NULL) printf("\n\t A PILHA esta vazia");
     else printf("\n\t A PILHA não está vazia");
     }// fim pilhaVazia

void imprimeUltimo(){
     printf("\n\t O ultimo Elemento da Pilha.: %d",topo->iInfo);
     }//fim imprimeUltimo     

void imprimePrimeiro(){
     while(topo->pAnt != NULL)
     topo = topo->pAnt;  
     printf("\n\t O primeiro Elemento da Pilha.: %d",topo->iInfo);      
     }//imprimePrimeiro

void eliminarElemento(){
     noPilha *pAux;
     
     if(topo != NULL){
     pAux=topo->pAnt;       
     free(topo);
     topo = pAux;
     printf("\n\t Elemento eliminado com sucesso!!");
      }else printf("\n\nA lista esta vazia \n\n ");
      
     }//eliminarElemento

Agora iremos inserir o main com o menu 

int main(){
    int nOpc; 
do{
printf("----------------------- Menu --------------------------------");
printf("\n\n\t1 - Inserir um Elemento");
printf("\n\t2 - Exibir a pilha TODA");
printf("\n\t3 - Exibir o ultimo Elemento");
printf("\n\t4 - Exibir o primeiro Elemento");
printf("\n\t5 - Eliminar um Elemento");
printf("\n\t6 - Testar se a pilha está Vazia");
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:
inserir();
printf("\n\nPressione ENTER para continuar...\n\n");
break;
case 2:
        imprime(); 
printf("\n\nPressione ENTER para continuar...\n\n");
break;
case 3:
    imprimeUltimo();
printf("\n\nPressione ENTER para continuar...\n\n");
break;
case 4: 
                 imprimePrimeiro();
                 printf("\n\nPressione ENTER para continuar...\n\n");
                 break;
            case 5:
                 eliminarElemento();
                 printf("\n\nPressione ENTER para continuar...\n\n");
                 break;
            case 6:
                 pilhaVazia();
                 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
Programa em funcionamento (pilha)
Programa em funcionamento (pilha)
fonte da imagem: bdfatec.blogspot.com.br

Bom pessoal o programa está aí! Qualquer dúvida escreva um comentário... grande abraço. 

para saber mais sobre estrutura de dados:
clique aqui ==> Estrutura de Dados - Lista Dinâmica com Menu
clique aqui ==> Estrutura de Dados - Lista Dinâmica Dupla


fonte: < Prof. Jean Daniel - Estrutura de Dados > 
            < Estrutura de Dados >
            < Pilhas >

adaptado: arroyo, gabriel