Estrutura de Dados - Aula 10 - Pilha
Estrutura de Dados - Aula 10 - Pilha
Estrutura de Dados - Aula 10 - Pilha
CONTROLE e
AUTOMAÇÃO
A Pilha
Aula 02
Sumário
• Representação de pilhas em C
• Implementação das funções primitivas
– empty
– push
– pop
– stacktop Não é primitiva
Representando pilhas em C
• Vetores
– O nº de elementos de um vetor é fixado em sua declaração
– A pilha é, fundamentalmente, um objeto dinâmico, cujo tamanho
muda conforme itens são empilhados/desempilhados
– Um vetor pode ser declarado suficientemente grande para armazenar
o tamanho máximo da pilha
• Uma extremidade do vetor é o final fixo da pilha
• O topo da pilha desloca‐se constantemente
• Logo, precisa‐se de outro campo para rastrear a posição do topo
da pilha
Representando pilhas em C
Representando pilhas em C
– Não há motivos para restringir uma pilha a conter somente inteiros
#define STACKSIZE 100 // Dimensão da pilha
#define INTGR 1 // Tipo “integer”
#define STRING 2 // Tipo “string”
struct stack_element {
int etype; // INTGR ou STRING
union {
int ival; // Possíveis tipos
char *pnt_sval;
} element;
};
struct stack { // Definição da pilha
int top;
struct stack_element items[STACKSIZE];
};
Prof. Rafael Concatto Beltrame 5
1/5
Representando pilhas em C
– Para imprimir o primeiro elemento da pilha, o script ficaria
struct stack s; // Declaração da pilha
struct stack_element s_aux; // Estrutura auxiliar
switch (s_aux.etype) {
case INTGR : printf(“%d \n”, s_aux.ival); break;
case STRING : printf(“%s \n”, s_aux.pnt_sval);
}
Representando pilhas em C
// Função empty()
empty(pnt_s) // Estrutura passada
struct stack *pnt_s; // como ponteiro
{
if (pnt_s -> top == -1)
return(TRUE); // Pilha vazia
else
return(FALSE); // Pilha com itens
}
Prof. Rafael Concatto Beltrame 8
1/5
Topo C
B
A
// Função POP
pop(pnt_s) // Estrutura passada
struct stack *pnt_s; // como ponteiro
{
// Testa underflow
if (empty(pnt_s)) {
printf(“%s”, “A pilha está vazia (underflow)”);
exit(1);
}
// Retorna item e decrementa top
return(pnt_s -> items[pnt_s -> top--]);
}
• Interpretação do script
– Se a pilha não estiver vazia, o primeiro valor será retornado
items[pnt_s -> top--]
• Se pnt_s->top for igual a 87, existem apenas 88 itens na pilha
• O valor de pnt_s->items[87] é retornado
• O valor de pnt_s->top é decrementado para 86
C
Topo B
A
Resumo