Você está na página 1de 22

Estruturas de Dados

Prof. Perini
Sistemas de Informação
Ciência da Computação
Disciplina: Estrutura de Dados
Pilhas

Profº José Carlos Perini

Fontes:
Apostila de Estruturas de Dados
Adaptado dos slides do Prof° Fábio L. R. Pelissoni
TAD: Pilhas

Definição:
• Uma PILHA é um Tipo Abstrato de Dados (TAD);

• É um conjunto ordenado de itens em que novos elementos


podem ser inseridos e do qual itens podem ser retirados
sempre em uma única extremidade, chamada TOPO da
PILHA;

• Em outros termos, uma PILHA é uma estrutura do tipo


LIFO – Last-in-first-out.

3
TAD: Pilhas
• Para visualizar uma pilha, imagine uma pilha de pratos. O
primeiro prato na mesa é o último a ser usado e o último prato
colocado na pilha é o primeiro a ser usado;

Pilha de Livros

• Pilhas são usadas em grande quantidade em software de


sistema, incluindo compiladores e interpretadores;

• Exemplo: a maioria dos compiladores C usa uma pilha


quando passa argumentos para funções;

4
TAD: Pilhas
• As operações com uma PILHA SEMPRE envolvem o topo da
PILHA.
Topo Último elemento inserido
da
Penúltimo elemento inserido
Pilha

Terceiro elemento inserido

Segundo elemento inserido

Primeiro elemento inserido

5
TAD: Pilhas

Para que serve uma Pilha?

Para modelar situações onde é preciso “guardar


para mais tarde” vários elementos e “lembrar”
sempre do último elemento armazenado.

6
TAD: Pilhas

Operações Básicas com PILHAS

CRIAR: Criar uma PILHA. A pilha é criada vazia, isto é,


sem nenhum elemento;

EMPILHAR (PUSH): Inserir um elemento numa PILHA. A


posição ocupada pelo elemento inserido passa ser o novo
topo da PILHA;

7
TAD: Pilhas

Operações Básicas com PILHAS

DESEMPILHAR (POP): Remover um elemento da PILHA.


O elemento a ser removido deve ser o que se encontra no
topo da PILHA;

CONSULTAR: Obter o valor do elemento que se encontra


no topo da PILHA.

8
TAD: Pilhas

Operações Básicas com PILHAS

Uma PILHA pode crescer e decrescer, estando sempre em


constante mudança ao longo da execução de um programa.

9
TAD: Pilhas
Listas Encadeadas x Pilhas (e Filas):
Pilhas Listas Encadeadas
• Regras rigorosas para acessar os • Pode acessar seus elementos de
dados armazenados; forma randômica;

• Operações de recuperação são, • Operações de recuperação não


por natureza, destrutivas; remove e destrói um item da lista;

• Usam uma região contínua de • Não precisa estar alocada


memória; seqüencialmente na memória;

• Pode operar em itens de dados • Exige estrutura de dados


simples e complexos complexos

10
TAD: Pilhas

Implementação de uma PILHA

• Para a implementação de uma PILHA, usando uma


linguagem de programação, como o C, pode-se implementá-
la usando:

1-) Alocação Seqüencial e Estática de Memória ou

2-) Alocação Dinâmica de Memória

11
TAD: Pilhas

2-) Implementação com Alocação Dinâmica de Memória

• Definição: Alocação Dinâmica


 As limitações de tamanho resultantes da utilização de vetores de
tamanho fixo na implementação de Pilhas Estáticas podem ser
contornadas pelo uso de estruturas de dados alocadas
dinamicamente;

 Todo o espaço de memória a ser utilizado (para armazenar os


elementos) é reservado (alocado) durante a execução do programa

12
TAD: Pilhas

2-) Implementação com Alocação Dinâmica de Memória

• Definição de uma estrutura (struct) para definir um TAD


Pilha Estática:

/* Definição da Pilha Estática – uso do vetor de elementos. */


struct pilha{
int topo;
int elementos[MAX];
}

13
TAD: Pilhas

2-) Implementação com Alocação Dinâmica de Memória

• Definição de uma estrutura (struct) para definir um TAD


Pilha Dinâmica:

/* Definição da Pilha Dinâmica – um campo com a informação e um


campo ponteiro para apontar para um próximo elemento da Pilha. */

struct elemento{
int info;
struct elemento *prox;
};

14
TAD: Pilhas
2-) Implementação com Alocação Dinâmica de Memória

• Na definição da Pilha Dinâmica um campo ponteiro prox


contém o endereço do próximo elemento da pilha, em vez de
um inteiro contendo o índice dentro do vetor estático;

• Utilizamos os recursos de alocação dinâmica de memória


para implementar pilha de forma dinâmica;

• Em vez de declarar um vetor para representar um conjunto


agregado de elementos, os elementos são alocados e
liberados, conforme a necessidade;

15
TAD: Pilhas

2-) Implementação com Alocação Dinâmica de Memória

• Elimina-se a necessidade de declarar um conjunto de


elementos de tamanho fixo;

• Protótipos das operações de manipulação da Pila Dinâmica:


void Push (struct elemento **p, int val);
int Pop (struct elemento **p);
void Consulta (struct elemento *p, int *val);

Obs: PILHAD.CPP e PilhaD2.cpp

16
TAD: Pilha estática

17
TAD: Pilha estática

18
TAD: Pilha estática

19
TAD: Pilha estática

20
TAD: Pilha estática

21
Perguntas

22

Você também pode gostar