UNIVERSIDADE FEDERAL DO AMAZONAS- UFAMINSTITUTO DE CIÊNCIAS EXATAS E TECNOLOGIA-
ICETSISTEMAS DE INFORMAÇÃO
ALGORITMOS E ESTRUTURAS DE DADOS II
PILHASACADÊMICOS: Eurimar Lemos Joicilene Nunes Katlhen Maciel Márcio Dias Yasmim Ehm
DEZEMBRO de 2011
CONCEITO/ FUNDAMENTOSPILHA : Uma das estruturas de dados linear mais simples é a
pilha. Possivelmente por essa razão, é a estrutura de dados mais utilizada em programação, sendo inclusive implementada diretamente pelo hardware da maioria das máquinas modernas.
Itacoatiara-AM
PILHA ESTÁTICA: também chamada de seqüencial, os elementos desta pilha são armazenados em endereços seqüenciais. Materializada na forma de um vetor (arranjo ou matriz).
1.Um vetor de elementos (tamanho pré-definido).2.Uma variável que controle o topo da pilha.
PILHA DINÂMICA: ou encadeada, elementos encadeados por ponteiros. Cada elemento possui pelo menos dois campos: um para armazenar a informação e outro para o endereço do próximo (ponteiro), tudo com alocação dinâmica.
1.Uma struct representando um nó da pilha (dado e ponteiro para o próximo nó da pilha).
2.Um ponteiro para o 1º nó representando a pilha.O primeiro elemento (início) da lista encadeada irá representar
o topo atual da pilha.Itacoatiara-AM
COMO FUNCIONA?Podemos fazer uma analogia com uma pilha de pratos em um restaurante1. Se quisermos adicionar um prato na pilha, o colocamos no topo
da pilha de pratos.2. Para pegar um prato da pilha, retiramos o do topo.
Ou ainda: um software que implemente a função UNDO (o famigerado “Crtl+Z”).
3. A última ação feita será a primeira a ser desfeita.4. Não podemos retirar qualquer ação, segue-se a ordem.5. Não podemos inserir uma ação na pilha de ações, caso ela não
se torne a última.
Itacoatiara-AM
Exemplo Pilha Estática
ABC
AB
AB
A
Itacoatiara-AM
Desempilha C
PPot PFis PCi
êPHis
Vazio
Exemplo Pilha Dinâmica
AuxAux
Pilha3 operações básicas: Consulta: acessa o elemento
posicionado no topo; Empilha: insere um novo elemento no
topo; Desempilha: remove um elemento do
topo.
3 operações essenciais: Inicializa: inicializa a pilha no estado
“vazia”; EstaVazia: verifica se a pilha está vazia; EstaCheia: verifica se a pilha está cheia;
Operações BásicasDefinição da
Estrutura
#define m 10
struct Pilha { int topo; int elem[m];};
Inicializar uma Pilhavoid iniciaPilha
(struct Pilha *P){ P->topo=-1; }
Empilhar na Pilhavoid empilhar(struct
Pilha *P, int x){ if (P->topo== m-1) printf(“Pilha
Cheia”); else { P->topo++; P->elem[P-
>topo]=x; } }
Itacoatiara-AM
Operações Básicas
void desempilha (struct Pilha *P)
{ if (P->topo==-1) printf(“Pilha
Vazia”); else { P->topo--; } }
Consulta o elemento da pilhaint topo (struct Pilha
*P){ int x; if (P->topo==-1) printf(“Pilha
Vazia”); else { x=P->elem[P-
>topo]; return (x); } }
Itacoatiara-AM
Desempilha da Pilha
Itacoatiara-AM
Demonstrando um algoritmo de pilha estática.
Itacoatiara-AM
APLICAÇÃOExemplo: utilização de uma pilha para garantir o correto
agrupamento de parênteses, colchetes e chaves em uma expressão matemática.
1.Verificar se existe um número igual de símbolos abrindo e fechando de cada tipo.2.Verificar se todo símbolo fechando está precedido de um abrindo do mesmo tipoEx.: ((A+B ou A+B( violam o critério 1
)A+B( ou (A+B)) violam o critério 2 (A+B] ou {A-(B]} violam os 2 critérios
1. Percorrer toda a expressão:•A cada símbolo abrindo, empilhar.•A cada símbolo fechando, desempilhar e verificar se é do mesmo tipo .2. Expressão válida:•se ao final, a pilha estiver vazia3. Expressão inválida:•se houver uma tentativa de desempilhar com a pilha vazia;•se o símbolo desempilhado for diferente do atual ou•se ao final a pilha NÃO estiver vazia.
APLICAÇÕES• Adequadas ao processamento de estruturas aninhadas de
profundidade imprevisível;sintaxe de expressões aritméticas.controle da seqüência de chamadas de expressões aritméticas.• Controle de recursividade;• Percurso em árvores.
Itacoatiara-AM
PARA QUE SERVE?É utilizado para problemas que envolvam seqüência de ações a serem realizadas. Ou seja, onde não há possibilidade de pular etapas.
Itacoatiara-AM
Itacoatiara-AM
Bibliografia1. SILVA, Osmar Quirino da. Estruturas de Dados e
Algoritmos Usando C – Fundamentos e Aplicações. Rio de Janeiro: Editora Ciência Moderna Ltda.,2007
2. PEREIRA, Silvio do Lago. Estruturas de Dados Fundamentais. Conceitos e Aplicações. 11ª Edição. São Paulo: Érica, 2008.