SlideShare una empresa de Scribd logo
1 de 10
TAD Pilha com Alocação
 Dinâmica de Memória
Operações
• Não existe o teste de Pilha Cheia
  – Na Implementação do TAD Pilha com alocação
    Dinâmica não temos limite de espaço.
• Assim as operações do tad são as seguinte:
  –   inicializaPilha
  –   pilhaVazia
  –   empilha
  –   desempilha
Estrutura de dados:
typedef int Elemento; // tipo a ser
  armazenado
typedef struct nodo {
   Elemento item;
   struct nodo *prox;
}* Nodo;
typedef struct {
              Nodo topo;
               }Pilha;
Pré e pos condicoes
• Inicializa
   – Pre-condições: Não há
   – Pós-condições: topo aponta para NULL
• Empilha(elemento):
   – Pré-condições: não há
   – Pós-condições: topo aponta para novo nodo contendo o
     elemento. Prox de topo aponta para o topo anterior
• Desempilha
   – Précondições: pilhaVazia = FALSO
   – Pós-condições: remove o nodo do topo. Topo aponta
     para o próximo de topo.
Operações
void inicializaPilha(Pilha *);
int pilhaVazia(Pilha);
void empilha (Pilha *, Elemento);
int desempilha (Pilha * Elemento *);
Elemento mostraTopo(Pilha);
PilhaAD.h completo
/* * Interface do Tad PilhaAD* */
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MSG_PILHAVAZIA "nA Pilha está vazian"
#define MAX 10 // tamanho máximo da Pilha
#define TRUE 1
#define FALSE 0
typedef int Elemento; // tipo a ser armazenado
typedef struct nodo {
   Elemento item;
   struct nodo *prox;
}* Nodo;
typedef struct {
               Nodo topo;
                }Pilha;
                   int pilhaVazia(Pilha);
                   void inicializaPilha(Pilha *);
                   void empilha (Pilha *, Elemento);
                   int desempilha (Pilha * Elemento *);
                   Elemento mostraTopo(Pilha);
Implementação das Operações
/* tadPilha.c * Implementação das operações do Tad Pilha* */
#include "TadPilhaAD.h"
void inicializaPilha(Pilha *p) {
        p->topo=NULL;
}
int pilhaVazia(Pilha p){
     return (p.topo==NULL);
  }
void empilha (Pilha *p, Elemento ele){
    Nodo novoNodo;
    novoNodo = malloc(sizeof(struct nodo));
    novoNodo->item=ele;
    novoNodo->prox=p->topo;
    p->topo=novoNodo;
}
Implementação das Operações
int desempilha(Pilha *p,Elemento ele) {

   Nodo aux;
  if (pilhaVazia(*p)==FALSE) {
     *ele = p->topo->item;
     aux = p->topo;
     p->topo = p->topo->prox;
     free(aux);
 }
 else{
     fprintf(stderr, MSG_PILHAVAZIA);
   }
   return ele;
 }
Testando o tadPilha (principal.c)
#include"TadPilhaAD.h"
void testePilhaAD();
void testePilhaAD(){
  Pilha p;
  int i;
  Elemento e;
  inicializaPilha(&p);
  for(i=0;i<10;i++) {
     empilha(&p,i);
  }
  while(pilhaVazia(p)==FALSE){
     e = desempilha(&p);
     printf("%dn",e);
  }
  fprintf(stderr,"Terminou ok.n");

}
int main(){
  testePilhaAD();
return 0;
}
Exercício
• Implementar uma solução para o problema
  das Torres de Hanoi utilizando Pilha

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Aula14
Aula14Aula14
Aula14
 
Aula 8
Aula 8Aula 8
Aula 8
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Filas encadeadas
Filas encadeadasFilas encadeadas
Filas encadeadas
 
Pilhas encadeadas
Pilhas encadeadasPilhas encadeadas
Pilhas encadeadas
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Linguagem c wellington telles - aula 08
Linguagem c   wellington telles - aula 08Linguagem c   wellington telles - aula 08
Linguagem c wellington telles - aula 08
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
Why functional programming matters
Why functional programming mattersWhy functional programming matters
Why functional programming matters
 
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
 
Introdução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central DispatchIntrodução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central Dispatch
 
Aula17
Aula17Aula17
Aula17
 
Ponteiros de Função
Ponteiros de FunçãoPonteiros de Função
Ponteiros de Função
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Introdução a linguagem Go
Introdução a linguagem GoIntrodução a linguagem Go
Introdução a linguagem Go
 
Monadic Design
Monadic DesignMonadic Design
Monadic Design
 
Linguagem Go
Linguagem GoLinguagem Go
Linguagem Go
 
Func time sleep.c
Func time sleep.cFunc time sleep.c
Func time sleep.c
 
Awk
AwkAwk
Awk
 

Similar a Pilha ad

11 tipos abstratos de dados
11   tipos abstratos de dados11   tipos abstratos de dados
11 tipos abstratos de dadosRicardo Bolanho
 
Aula arvore binaria como encontrar qualquer coisa em C
Aula arvore binaria como encontrar qualquer coisa em CAula arvore binaria como encontrar qualquer coisa em C
Aula arvore binaria como encontrar qualquer coisa em Cl4nam9
 
arvore binaraia cabalah 333 aula 023 prof Kerloson
arvore binaraia cabalah 333 aula 023 prof Kerlosonarvore binaraia cabalah 333 aula 023 prof Kerloson
arvore binaraia cabalah 333 aula 023 prof Kerlosonl4nam9
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinNelson Glauber Leal
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Alamo Saravali
 

Similar a Pilha ad (8)

Pilhas java
Pilhas javaPilhas java
Pilhas java
 
11 tipos abstratos de dados
11   tipos abstratos de dados11   tipos abstratos de dados
11 tipos abstratos de dados
 
Programação-Aula004
Programação-Aula004Programação-Aula004
Programação-Aula004
 
Aula arvore binaria como encontrar qualquer coisa em C
Aula arvore binaria como encontrar qualquer coisa em CAula arvore binaria como encontrar qualquer coisa em C
Aula arvore binaria como encontrar qualquer coisa em C
 
arvore binaraia cabalah 333 aula 023 prof Kerloson
arvore binaraia cabalah 333 aula 023 prof Kerlosonarvore binaraia cabalah 333 aula 023 prof Kerloson
arvore binaraia cabalah 333 aula 023 prof Kerloson
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
Aula 10
Aula 10 Aula 10
Aula 10
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
 

Pilha ad

  • 1. TAD Pilha com Alocação Dinâmica de Memória
  • 2. Operações • Não existe o teste de Pilha Cheia – Na Implementação do TAD Pilha com alocação Dinâmica não temos limite de espaço. • Assim as operações do tad são as seguinte: – inicializaPilha – pilhaVazia – empilha – desempilha
  • 3. Estrutura de dados: typedef int Elemento; // tipo a ser armazenado typedef struct nodo { Elemento item; struct nodo *prox; }* Nodo; typedef struct { Nodo topo; }Pilha;
  • 4. Pré e pos condicoes • Inicializa – Pre-condições: Não há – Pós-condições: topo aponta para NULL • Empilha(elemento): – Pré-condições: não há – Pós-condições: topo aponta para novo nodo contendo o elemento. Prox de topo aponta para o topo anterior • Desempilha – Précondições: pilhaVazia = FALSO – Pós-condições: remove o nodo do topo. Topo aponta para o próximo de topo.
  • 5. Operações void inicializaPilha(Pilha *); int pilhaVazia(Pilha); void empilha (Pilha *, Elemento); int desempilha (Pilha * Elemento *); Elemento mostraTopo(Pilha);
  • 6. PilhaAD.h completo /* * Interface do Tad PilhaAD* */ #include <stdio.h> #include <stdlib.h> #include <malloc.h> #define MSG_PILHAVAZIA "nA Pilha está vazian" #define MAX 10 // tamanho máximo da Pilha #define TRUE 1 #define FALSE 0 typedef int Elemento; // tipo a ser armazenado typedef struct nodo { Elemento item; struct nodo *prox; }* Nodo; typedef struct { Nodo topo; }Pilha; int pilhaVazia(Pilha); void inicializaPilha(Pilha *); void empilha (Pilha *, Elemento); int desempilha (Pilha * Elemento *); Elemento mostraTopo(Pilha);
  • 7. Implementação das Operações /* tadPilha.c * Implementação das operações do Tad Pilha* */ #include "TadPilhaAD.h" void inicializaPilha(Pilha *p) { p->topo=NULL; } int pilhaVazia(Pilha p){ return (p.topo==NULL); } void empilha (Pilha *p, Elemento ele){ Nodo novoNodo; novoNodo = malloc(sizeof(struct nodo)); novoNodo->item=ele; novoNodo->prox=p->topo; p->topo=novoNodo; }
  • 8. Implementação das Operações int desempilha(Pilha *p,Elemento ele) { Nodo aux; if (pilhaVazia(*p)==FALSE) { *ele = p->topo->item; aux = p->topo; p->topo = p->topo->prox; free(aux); } else{ fprintf(stderr, MSG_PILHAVAZIA); } return ele; }
  • 9. Testando o tadPilha (principal.c) #include"TadPilhaAD.h" void testePilhaAD(); void testePilhaAD(){ Pilha p; int i; Elemento e; inicializaPilha(&p); for(i=0;i<10;i++) { empilha(&p,i); } while(pilhaVazia(p)==FALSE){ e = desempilha(&p); printf("%dn",e); } fprintf(stderr,"Terminou ok.n"); } int main(){ testePilhaAD(); return 0; }
  • 10. Exercício • Implementar uma solução para o problema das Torres de Hanoi utilizando Pilha