Você está na página 1de 14

Estruturas de Dados

Prof. Perini
Sistemas de Informação
Ciência da Computação
Disciplina: Estrutura de Dados
Pilha – Alocação dinâmica

Profº José Carlos Perini


Fontes:
Apostila de Estruturas de Dados
Adaptado dos slides do Prof° Fábio L. R. Pelissoni
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

3
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

4
TAD: Pilhas

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 no {
int elem;
struct no *prox;
};

5
TAD: Pilhas
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;

6
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 (int valor, no **t); // inclui um valor na pilha
int pop (no **t); // exclui um valor da pilha
void consulta (no *t); // mostra os valores da pilha

7
TAD: Pilha dinâmica - struct

8
TAD: Pilha dinâmica
verifica se está vazia

9
TAD: Pilha dinâmica
empilha (push)

10
TAD: Pilha dinâmica
Desempilha (pop)

11
TAD: Pilha dinâmica
Consulta

12
Testando a pilha dinâmica

13
Exercícios práticos
Lista 9:
1. Fazer um programa em C que recebe um número inteiro do
usuário e transforma esse número em binário. Utilizar a
estrutura de pilha.

2. Escreva um módulo procedimento no *t) que remove o


elemento “mais antigo” da pilha p, mantendo os outros em sua
ordem original. A pilha p tem capacidade para armazenar 10
elementos, e pode não estar cheia.

3. Escreva um módulo procedimento no *t, int num) que remove


todos os números iguais ao número recebido como parâmetro
da pilha p, mantendo os outros em sua ordem original.

14

Você também pode gostar