SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
Prof. Adriano Teixeira de Souza
   É uma das estruturas de dados mais simples

   A idéia fundamental da pilha é que todo o acesso a
    seus elementos é feito através do seu topo.

   Assim, quando um elemento novo é introduzido na
    pilha, passa a ser o elemento do topo, e o único
    elemento que pode ser removido da pilha é o do
    topo.
   Verificação de parênteses.


   Retirada de vagões de um trem.


   Retirada de mercadorias em um caminhão de
    entregas.
   Os elementos da pilha são retirados na ordem
    inversa à ordem em que foram introduzidos:
    o primeiro que sai é o último que entrou
    (LIFO – last in, first out).
   Existem duas operações básicas que devem
    ser implementadas numa estrutura de pilha:
    ◦ operação para empilhar (push) um novo elemento,
      inserindo-o no topo,
    ◦ operação para desempilhar (pop) um elemento,
      removendo-o do topo
push(b)
push(a)


  b

  a




          topo
                 x

                 m

                 k
topo
                                     b
               topo
                      a              a
topo
       x              x              x

       m              m              m

       k   push(a)    k   push(b)    k
pop(b)
pop(a)




         topo
                b

                a

                x

                m

                k
topo
       b

       a       topo
                      a
                              topo
       x              x              x

       m              m              m

       k   pop(b)     k   pop(a)     k
   Supondo a pilha está armazenada em um
    vetor pilha[0..n-1].
   A parte do vetor ocupada pela pilha será:




      0                           t      n-1


                  pilha[0..n-1]
#define MAX 50

typedef struct {
  int n;
  float vet[MAX];
} Pilha;
Pilha* cria(void)
{
  Pilha* p;
  p = (Pilha*) malloc(sizeof(Pilha));
  p->n = 0;/*Inicializa com zero elementos*/
  return p;
}




                      Prof. Adriano Teixeira de Souza
void push(Pilha* p, float v)
{
   if(p->n==MAX){
      printf("Capacidade da pilha estourou.n");
      exit(1); /*aborta programa*/
   }
   /* insere elemento na próxima posição livre */
   p->vet[p->n] = v;
   p->n++;
}
float pop(Pilha* p)
{
   float v;
   if (vazia(p)) {
      printf("Pilha vazia.n");
      exit(1); /*aborta programa*/
   }
   /*retira elemento do topo*/
   v = p->vet[p->n-1];
   p->n--;
   return v;
}
int vazia(Pilha* p)
{
    return (p->n == 0);
}
void libera(Pilha* p)
{
   free(p);
}
void imprime (Pilha* p) {
      int i;
      for (i=p->n-1; i>=0; i--)
             printf("%fn",p->vet[i]);
}




                          Prof. Adriano Teixeira de Souza
main(){
       Pilha* p = cria();
       push(p,20.0);
       push(p,20.8);
       push(p,20.3);
       push(p,44.5);
       push(p,33.3);
       push(p,20.9);
       imprime (p);
       printf ("Retirado: %4.2fn", pop(p));
       printf ("Retirado: %4.2fn", pop(p));
       printf ("Configuracao da fila:n");
       imprime (p);
       libera (p);
      system("pause");
}



                                Prof. Adriano Teixeira de Souza
   Quando o número máximo de elementos que
    serão armazenados na pilha não é conhecido,
    devemos implementar a pilha usando uma
    estrutura de dados dinâmica, no caso,
    empregando uma lista encadeada.
   Os elementos são armazenados na lista e a
    pilha pode ser representada simplesmente por
    um ponteiro para o primeiro nó da lista.
typedef struct {
   float       info;
   struct No* anterior;
} No;

typedef struct {
  No* topo;
} Pilha;
   Criar uma estrutura de pilha;
   Inserir um elemento no topo (push);
   Remover o elemento do topo (pop);
   Verificar se a pilha está vazia;
   Liberar a estrutura de pilha
Pilha* cria(void)
{
  Pilha *p;
  p = (Pilha*) malloc(sizeof(Pilha));
  p->topo = NULL;
  return p;
}
Pilha* push(Pilha *p, float v)
{
  No* aux;
  aux = (No*) malloc(sizeof(No));
  aux->info = v;
  aux->anterior = p->topo;
  p->topo = aux;
  return aux;
}
float pop(Pilha *p)
{
   float v;
   No* aux;
   if (vazia(p))
   {
      printf(“Pilha vazia.”);
      exit(1); /*aborta o programa*/
   }
   v      = p->topo->info;
   aux    = p->topo;
   p->topo = aux->anterior;
   free(aux);
   return v;
}
int vazia(Pilha *p)
{
    return (p->topo == NULL);
}
void libera(Pilha *p)
{
   No* q = p->topo;
   while (q != NULL)
   {
       No *t = q->anterior;
       free(q);
       q = t;
   }
   free(p);
}
void imprime (Pilha* p) {
      No* q;
      for (q=p->topo; q!=NULL; q=q->anterior)
        printf("%4.2fn",q->info);
}




                       Prof. Adriano Teixeira de Souza
main(){
       Pilha* p = cria();
       push(p,20.0);
       push(p,20.8);
       push(p,20.3);
       push(p,44.5);
       push(p,33.3);
       push(p,20.9);
       imprime (p);
       printf ("Retirado: %4.2fn", pop(p));
       printf ("Retirado: %4.2fn", pop(p));
       printf ("Configuracao da fila:n");
       imprime (p);
       libera (p);
      system("pause");
}



                                Prof. Adriano Teixeira de Souza
   Utilizando o algorítimo anteriormente
    apresentado implemente um programa que
    insira dados em uma pilha A e em seguida
    remova-os elementos da pilha A e insira-os
    na pilha B com sua ordem invertida.




                        Prof. Adriano Teixeira de Souza

Mais conteúdo relacionado

Mais procurados

Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - JavaArthur Emanuel
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Adriano Teixeira de Souza
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasAdriano Teixeira de Souza
 
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Leinylson Fontinele
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Adriano Teixeira de Souza
 
Algoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosAlgoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosMauro Pereira
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoRangel Javier
 
Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Gercélia Ramos
 
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)Leinylson Fontinele
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidosGleydson Sousa
 
Estrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
Estrutura de Dados - Aula 09 - Listas Simplesmente EncadeadasEstrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
Estrutura de Dados - Aula 09 - Listas Simplesmente EncadeadasLeinylson Fontinele
 
Aula 7 - Repetição enquanto - parte 1
Aula 7 - Repetição enquanto - parte 1Aula 7 - Repetição enquanto - parte 1
Aula 7 - Repetição enquanto - parte 1Pacc UAB
 
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERBanco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERRangel Javier
 

Mais procurados (20)

Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - Java
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Linguagem C 09 Ponteiros
Linguagem C 09 PonteirosLinguagem C 09 Ponteiros
Linguagem C 09 Ponteiros
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
 
Algoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosAlgoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registros
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
 
Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)
 
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidos
 
Estrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
Estrutura de Dados - Aula 09 - Listas Simplesmente EncadeadasEstrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
Estrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
Aula 7 - Repetição enquanto - parte 1
Aula 7 - Repetição enquanto - parte 1Aula 7 - Repetição enquanto - parte 1
Aula 7 - Repetição enquanto - parte 1
 
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERBanco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 

Destaque

Estrutura de Dados - Procedimentos e Funções
Estrutura de Dados - Procedimentos e FunçõesEstrutura de Dados - Procedimentos e Funções
Estrutura de Dados - Procedimentos e FunçõesAdriano Teixeira de Souza
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Adriano Teixeira de Souza
 
Aula01 - estrutura de dados
Aula01 - estrutura de dadosAula01 - estrutura de dados
Aula01 - estrutura de dadosAbner Lima
 
Eletroquimica e pilhas
Eletroquimica e pilhasEletroquimica e pilhas
Eletroquimica e pilhasKaires Braga
 
Estrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e HeterogêneasEstrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e HeterogêneasAdriano Teixeira de Souza
 
Estrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memóriaEstrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memóriaLeinylson Fontinele
 
Tecnologias Web com foco na criação de Landing Pages
Tecnologias Web com foco na criação de Landing PagesTecnologias Web com foco na criação de Landing Pages
Tecnologias Web com foco na criação de Landing PagesRangel Javier
 
Estruturas de dados e técnicas de programação
Estruturas de dados e técnicas de programaçãoEstruturas de dados e técnicas de programação
Estruturas de dados e técnicas de programaçãoEverson Wolf
 

Destaque (20)

Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
Estruturas de dados
Estruturas de dadosEstruturas de dados
Estruturas de dados
 
Pilhas e Filas
Pilhas e FilasPilhas e Filas
Pilhas e Filas
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Estrutura de Dados - Procedimentos e Funções
Estrutura de Dados - Procedimentos e FunçõesEstrutura de Dados - Procedimentos e Funções
Estrutura de Dados - Procedimentos e Funções
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Pilha em C
Pilha em CPilha em C
Pilha em C
 
Aula01 - estrutura de dados
Aula01 - estrutura de dadosAula01 - estrutura de dados
Aula01 - estrutura de dados
 
Pilhas
PilhasPilhas
Pilhas
 
Pilhas
PilhasPilhas
Pilhas
 
Eletroquimica e pilhas
Eletroquimica e pilhasEletroquimica e pilhas
Eletroquimica e pilhas
 
Estrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e HeterogêneasEstrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e Heterogêneas
 
Estrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memóriaEstrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memória
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Listas: conceito e estáticas
Listas:  conceito e estáticasListas:  conceito e estáticas
Listas: conceito e estáticas
 
Tecnologias Web com foco na criação de Landing Pages
Tecnologias Web com foco na criação de Landing PagesTecnologias Web com foco na criação de Landing Pages
Tecnologias Web com foco na criação de Landing Pages
 
Estruturas de dados e técnicas de programação
Estruturas de dados e técnicas de programaçãoEstruturas de dados e técnicas de programação
Estruturas de dados e técnicas de programação
 
Pilha ad
Pilha adPilha ad
Pilha ad
 
Função malloc
Função mallocFunção malloc
Função malloc
 

Semelhante a Estrutura de dados - Pilhas

Semelhante a Estrutura de dados - Pilhas (18)

Aula 8
Aula 8Aula 8
Aula 8
 
Pilhas encadeadas
Pilhas encadeadasPilhas encadeadas
Pilhas encadeadas
 
Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHAS
 
Pilhas java
Pilhas javaPilhas java
Pilhas java
 
Pilha
PilhaPilha
Pilha
 
Programação-Aula004
Programação-Aula004Programação-Aula004
Programação-Aula004
 
Aula 10
Aula 10 Aula 10
Aula 10
 
Aula14
Aula14Aula14
Aula14
 
aula de cálculo pdf atualizado 2023 funções
aula de cálculo pdf atualizado 2023 funçõesaula de cálculo pdf atualizado 2023 funções
aula de cálculo pdf atualizado 2023 funções
 
Aula 12
Aula 12Aula 12
Aula 12
 
Aula 15
Aula 15Aula 15
Aula 15
 
Pilhas e Filas.ppt
Pilhas e Filas.pptPilhas e Filas.ppt
Pilhas e Filas.ppt
 
Aula 9
Aula 9Aula 9
Aula 9
 
11 tipos abstratos de dados
11   tipos abstratos de dados11   tipos abstratos de dados
11 tipos abstratos de dados
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocos
 
Aula02 Pilhas
Aula02   PilhasAula02   Pilhas
Aula02 Pilhas
 
Aula actionscript basico
Aula actionscript basicoAula actionscript basico
Aula actionscript basico
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando C
 

Mais de Adriano Teixeira de Souza

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Adriano Teixeira de Souza
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasAdriano Teixeira de Souza
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSAdriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaAdriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoParadigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosAdriano Teixeira de Souza
 

Mais de Adriano Teixeira de Souza (20)

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Responsive web design
Responsive web designResponsive web design
Responsive web design
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de Exceções
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de Controle
 
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoParadigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
 

Estrutura de dados - Pilhas

  • 2. É uma das estruturas de dados mais simples  A idéia fundamental da pilha é que todo o acesso a seus elementos é feito através do seu topo.  Assim, quando um elemento novo é introduzido na pilha, passa a ser o elemento do topo, e o único elemento que pode ser removido da pilha é o do topo.
  • 3. Verificação de parênteses.  Retirada de vagões de um trem.  Retirada de mercadorias em um caminhão de entregas.
  • 4. Os elementos da pilha são retirados na ordem inversa à ordem em que foram introduzidos: o primeiro que sai é o último que entrou (LIFO – last in, first out).  Existem duas operações básicas que devem ser implementadas numa estrutura de pilha: ◦ operação para empilhar (push) um novo elemento, inserindo-o no topo, ◦ operação para desempilhar (pop) um elemento, removendo-o do topo
  • 5. push(b) push(a) b a topo x m k
  • 6. topo b topo a a topo x x x m m m k push(a) k push(b) k
  • 7. pop(b) pop(a) topo b a x m k
  • 8. topo b a topo a topo x x x m m m k pop(b) k pop(a) k
  • 9. Supondo a pilha está armazenada em um vetor pilha[0..n-1].  A parte do vetor ocupada pela pilha será: 0 t n-1 pilha[0..n-1]
  • 10. #define MAX 50 typedef struct { int n; float vet[MAX]; } Pilha;
  • 11. Pilha* cria(void) { Pilha* p; p = (Pilha*) malloc(sizeof(Pilha)); p->n = 0;/*Inicializa com zero elementos*/ return p; } Prof. Adriano Teixeira de Souza
  • 12. void push(Pilha* p, float v) { if(p->n==MAX){ printf("Capacidade da pilha estourou.n"); exit(1); /*aborta programa*/ } /* insere elemento na próxima posição livre */ p->vet[p->n] = v; p->n++; }
  • 13. float pop(Pilha* p) { float v; if (vazia(p)) { printf("Pilha vazia.n"); exit(1); /*aborta programa*/ } /*retira elemento do topo*/ v = p->vet[p->n-1]; p->n--; return v; }
  • 14. int vazia(Pilha* p) { return (p->n == 0); }
  • 16. void imprime (Pilha* p) { int i; for (i=p->n-1; i>=0; i--) printf("%fn",p->vet[i]); } Prof. Adriano Teixeira de Souza
  • 17. main(){ Pilha* p = cria(); push(p,20.0); push(p,20.8); push(p,20.3); push(p,44.5); push(p,33.3); push(p,20.9); imprime (p); printf ("Retirado: %4.2fn", pop(p)); printf ("Retirado: %4.2fn", pop(p)); printf ("Configuracao da fila:n"); imprime (p); libera (p); system("pause"); } Prof. Adriano Teixeira de Souza
  • 18. Quando o número máximo de elementos que serão armazenados na pilha não é conhecido, devemos implementar a pilha usando uma estrutura de dados dinâmica, no caso, empregando uma lista encadeada.  Os elementos são armazenados na lista e a pilha pode ser representada simplesmente por um ponteiro para o primeiro nó da lista.
  • 19. typedef struct { float info; struct No* anterior; } No; typedef struct { No* topo; } Pilha;
  • 20. Criar uma estrutura de pilha;  Inserir um elemento no topo (push);  Remover o elemento do topo (pop);  Verificar se a pilha está vazia;  Liberar a estrutura de pilha
  • 21. Pilha* cria(void) { Pilha *p; p = (Pilha*) malloc(sizeof(Pilha)); p->topo = NULL; return p; }
  • 22. Pilha* push(Pilha *p, float v) { No* aux; aux = (No*) malloc(sizeof(No)); aux->info = v; aux->anterior = p->topo; p->topo = aux; return aux; }
  • 23. float pop(Pilha *p) { float v; No* aux; if (vazia(p)) { printf(“Pilha vazia.”); exit(1); /*aborta o programa*/ } v = p->topo->info; aux = p->topo; p->topo = aux->anterior; free(aux); return v; }
  • 24. int vazia(Pilha *p) { return (p->topo == NULL); }
  • 25. void libera(Pilha *p) { No* q = p->topo; while (q != NULL) { No *t = q->anterior; free(q); q = t; } free(p); }
  • 26. void imprime (Pilha* p) { No* q; for (q=p->topo; q!=NULL; q=q->anterior) printf("%4.2fn",q->info); } Prof. Adriano Teixeira de Souza
  • 27. main(){ Pilha* p = cria(); push(p,20.0); push(p,20.8); push(p,20.3); push(p,44.5); push(p,33.3); push(p,20.9); imprime (p); printf ("Retirado: %4.2fn", pop(p)); printf ("Retirado: %4.2fn", pop(p)); printf ("Configuracao da fila:n"); imprime (p); libera (p); system("pause"); } Prof. Adriano Teixeira de Souza
  • 28. Utilizando o algorítimo anteriormente apresentado implemente um programa que insira dados em uma pilha A e em seguida remova-os elementos da pilha A e insira-os na pilha B com sua ordem invertida. Prof. Adriano Teixeira de Souza