4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de...

26
06/20/22 EDA - Prof. Paulemir Campos 1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina: Estrutura de Dados e Arquivo Prof.: Paulemir G. Campos

Transcript of 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de...

Page 1: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 1

Pilhas e Filas usando Alocação Estática e Dinâmica de

Memória

UPE – Caruaru – Sistemas de InformaçãoDisciplina: Estrutura de Dados e ArquivoProf.: Paulemir G. Campos

Page 2: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 2

Pilhas: Introdução

Definição É uma estrutura de

dados de tamanho variável, sendo que elementos são incluídos (empilhados) e/ou removidos (desempilhados) apenas pela extremidade topo.

15

12

99

54

102

77

Topo

Base

Page 3: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 3

Pilhas: Introdução

Note que uma pilha é uma estrutura de dados do tipo FILO (First In Last Out).

Isto porquê o primeiro elemento empilhado é sempre o último a ser desempilhado.

Page 4: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 4

Pilhas: Introdução

Operações Básicas:

Teste de pilha vazia; Criação da pilha; Empilhamento; Desempilhamento; Acesso aos elementos da pilha.

Page 5: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 5

Pilhas: Introdução

Do ponto de vista da alocação de memória para esse tipo de estrutura de dados, podem ser implementadas usando: Alocação Estática: Em geral através de

arranjo ou vetor; Alocação Dinâmica: Utilizando ponteiro.

Normalmente com lista simplesmente encadeada.

Page 6: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 6

Pilhas: Alocação Estática

Características: Teste de Pilha Vazia: Tamanho do Vetor é

zero; Cria-se um vetor de tamanho suficientemente

grande para a finalidade de uso; Quando um elemento é empilhado o índice

do topo é acrescido em 1; Quando um elemento é desempilhado (se

possível) o índice do topo é decrescido em 1.

Page 7: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 7

Pilhas: Alocação Estática

Características: Geralmente há uma variável do tipo inteiro

chamada topo, para armazenar o índice do vetor correspondente ao topo da pilha;

Caso o vetor comece em 1, uma pilha vazia teria topo=0.

Neste caso, uma pilha estaria vazia se topo=0.

O acesso ao elementos é feito pelo topo, bem como empilhamentos e desempilhamentos.

Page 8: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 8

Pilhas: Alocação Dinâmica

Considere a definição do tipo tPilhaSimples abaixo:

defina estrutura no {caracter dadoponteiro estrutura no proximo

} tPilhaSimples

Page 9: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 9

Pilhas: Alocação Dinâmica

Criando uma pilha unitária:ponteiro tPilhaSimples func CriaPilha(caracter

novo){ponteiro tPilhaSimples topo topo = aloque(tPilhaSimples)topo->dado = novotopo->proximo = NULLretorne topo

}

Page 10: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 10

Pilhas: Alocação Dinâmica

Teste de pilha vazia:

booleano func PilhaVazia(ponteiro tPilhaSimples topo){

se (topo == NULL) retorne TRUEsenao retorne FALSE

}

Page 11: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 11

Pilhas: Alocação Dinâmica

Empilhando um elemento:

ponteiro tPilhaSimples func Empilha (ponteiro tPilhaSimples topo; caracter novo) {

ponteiro tPilhaSimples novoTopo

novoTopo = aloque(tPilhaSimples)se (novoTopo == NULL) retorne topo /* Erro durante a

alocação dinâmica de memória */

novoTopo->dado = novonovoTopo->proximo = toporetorne novoTopo

}

Page 12: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 12

Pilhas: Alocação Dinâmica

Desempilhando um elemento:

ponteiro tPilhaSimples func Desempilha (ponteiro tPilhaSimples topo) {ponteiro tPilhaSimples novoTopo

se (Topo == NULL) retorne topo /* Pilha vazia */novoTopo = topo->proximodesaloque(topo)retorne novoTopo

}

Page 13: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 13

Pilhas: Alocação Dinâmica

Acessando elementos da pilha

Como estamos usando uma lista simplesmente encadeada podemos acessar todos os elementos da pilha, apartir do topo, fazendo pequenos ajustes na função de acesso aos elementos de uma lista simples para uso com o tipo pilha, sem ter a necessidade de desempilhá-los.

Page 14: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 14

Filas: Introdução

Definição É uma estrutura de dados de tamanho

variável, sendo que elementos são incluídos (enfileirados) pelo fim da fila e removidos (desenfileirados) pelo início da fila.

15 12 19 51 7 213 54 99 88

INÍCIO FIM

Page 15: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 15

Filas: Introdução

Note que uma fila é uma estrutura de dados do tipo FIFO (First In First Out).

Isto porquê o primeiro elemento enfileirado é sempre o primeiro a ser desenfileirado.

Page 16: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 16

Filas: Introdução

Operações Básicas:

Teste de fila vazia; Criação da fila; Enfileiramento; Desenfileiramento; Acesso aos elementos da fila.

Page 17: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 17

Filas: Introdução

Do ponto de vista da alocação de memória para esse tipo de estrutura de dados, podem ser implementadas usando: Alocação Estática: Em geral através de

arranjo ou vetor; Alocação Dinâmica: Utilizando ponteiro.

Normalmente com lista simplesmente encadeada.

Page 18: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 18

Filas: Alocação Estática

Características: Teste de Fila Vazia: Índice fim menor que

inicio; Cria-se um vetor de tamanho suficientemente

grande para a finalidade de uso; Quando um elemento é enfileirado o valor do

fim é igual ao tamanho do vetor; Quando um elemento é desenfileirado (se

possível) o valor do inicio é acrescido em 1.

Page 19: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 19

Filas: Alocação Estática

Características: Note que, desta forma, posições vão se

perdendo na fila estática. Um solução, é deslocar o conteúdo do vetor

em uma posição no sentido do índice inicial do vetor.

Assim, como o início será sempre um mesmo valor, há apenas a necessidade da variável fim.

Page 20: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 20

Filas: Alocação Dinâmica

Considere a definição do tipo tFilaSimples abaixo:

defina estrutura no {caracter dadoponteiro estrutura no proximo

} tFilaSimples

Page 21: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 21

Filas: Alocação Dinâmica

Criando uma fila unitária:ponteiro tFilaSimples func CriaFila(caracter

novo){ponteiro tFilaSimples inicio inicio = aloque(tFilaSimples)inicio->dado = novoinicio->proximo = NULLretorne inicio

}

Page 22: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 22

Filas: Alocação Dinâmica

Teste de fila vazia:

booleano func FilaVazia(ponteiro tFilaSimples inicio){

se (inicio == NULL) retorne TRUEsenao retorne FALSE

}

Page 23: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 23

Filas: Alocação Dinâmica Enfileirando um elemento:

ponteiro tFilaSimples func Enfileira (ponteiro tFilaSimples inicio; caracter elemento) {

ponteiro tFilaSimples temp, novotemp = cabeca /* Considere que inicio não é um ponteiro nulo *//* Percorre a fila até encontrar o último elemento */enquanto (temp->proximo != NULL)

temp = temp->proximo/* Enfileira o novo elemento no fim da fila */novo = aloque(tFilaSimples)novo->dado = Elementonovo->proximo = temp->proximotemp->proximo = novoretorne inicio

}

Page 24: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 24

Filas: Alocação Dinâmica

Desenfileirando um elemento:

ponteiro tFilaSimples func Desenfileira (ponteiro tFilaSimples inicio) {ponteiro tFilaSimples novoInicio

se (inicio == NULL) retorne inicio /* Fila vazia */novoInicio = inicio->proximodesaloque(inicio)retorne novoInicio

}

Page 25: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 25

Filas: Alocação Dinâmica

Acessando elementos da fila

Como estamos usando uma lista simplesmente encadeada podemos acessar todos os elementos da fila, apartir do inicio, fazendo pequenos ajustes na função de acesso aos elementos de uma lista simplesmente encadeada para usar com o tipo fila.

Page 26: 4/12/2015EDA - Prof. Paulemir Campos1 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória UPE – Caruaru – Sistemas de Informação Disciplina:

04/11/23 EDA - Prof. Paulemir Campos 26

Szwarcfiter, J. L.; Markenzon, L. Estruturas de Dados e seus Algoritmos. Rio de Janeiro: LTC, 2a. ed., 1994.

Veloso, P. et al. Estrutura de Dados. Rio de Janeiro: Editora Campus, 1996.

Referências