A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Pilhas e Filas usando Alocação Estática e Dinâmica de Memória"— Transcrição da apresentação:

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 Pilhas e Filas usando Alocação Estática e Dinâmica de Memória 4/11/2017 EDA - Prof. Paulemir Campos

2 EDA - Prof. Paulemir Campos
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 4/11/2017 EDA - Prof. Paulemir Campos

3 EDA - Prof. Paulemir Campos
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. 4/11/2017 EDA - Prof. Paulemir Campos

4 EDA - Prof. Paulemir Campos
Pilhas: Introdução Operações Básicas: Teste de pilha vazia; Criação da pilha; Empilhamento; Desempilhamento; Acesso aos elementos da pilha. 4/11/2017 EDA - Prof. Paulemir Campos

5 EDA - Prof. Paulemir Campos
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. 4/11/2017 EDA - Prof. Paulemir Campos

6 EDA - Prof. Paulemir Campos
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. 4/11/2017 EDA - Prof. Paulemir Campos

7 EDA - Prof. Paulemir Campos
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. 4/11/2017 EDA - Prof. Paulemir Campos

8 EDA - Prof. Paulemir Campos
Pilhas: Alocação Dinâmica Considere a definição do tipo tPilhaSimples abaixo: defina estrutura no { caracter dado ponteiro estrutura no proximo } tPilhaSimples 4/11/2017 EDA - Prof. Paulemir Campos

9 EDA - Prof. Paulemir Campos
Pilhas: Alocação Dinâmica Criando uma pilha unitária: ponteiro tPilhaSimples func CriaPilha(caracter novo){ ponteiro tPilhaSimples topo topo = aloque(tPilhaSimples) topo->dado = novo topo->proximo = NULL retorne topo } 4/11/2017 EDA - Prof. Paulemir Campos

10 EDA - Prof. Paulemir Campos
Pilhas: Alocação Dinâmica Teste de pilha vazia: booleano func PilhaVazia(ponteiro tPilhaSimples topo){ se (topo == NULL) retorne TRUE senao retorne FALSE } 4/11/2017 EDA - Prof. Paulemir Campos

11 EDA - Prof. Paulemir Campos
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 = novo novoTopo->proximo = topo retorne novoTopo } 4/11/2017 EDA - Prof. Paulemir Campos

12 EDA - Prof. Paulemir Campos
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->proximo desaloque(topo) retorne novoTopo } 4/11/2017 EDA - Prof. Paulemir Campos

13 EDA - Prof. Paulemir Campos
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. 4/11/2017 EDA - Prof. Paulemir Campos

14 EDA - Prof. Paulemir Campos
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. INÍCIO FIM 4/11/2017 EDA - Prof. Paulemir Campos

15 EDA - Prof. Paulemir Campos
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. 4/11/2017 EDA - Prof. Paulemir Campos

16 EDA - Prof. Paulemir Campos
Filas: Introdução Operações Básicas: Teste de fila vazia; Criação da fila; Enfileiramento; Desenfileiramento; Acesso aos elementos da fila. 4/11/2017 EDA - Prof. Paulemir Campos

17 EDA - Prof. Paulemir Campos
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. 4/11/2017 EDA - Prof. Paulemir Campos

18 EDA - Prof. Paulemir Campos
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. 4/11/2017 EDA - Prof. Paulemir Campos

19 EDA - Prof. Paulemir Campos
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. 4/11/2017 EDA - Prof. Paulemir Campos

20 EDA - Prof. Paulemir Campos
Filas: Alocação Dinâmica Considere a definição do tipo tFilaSimples abaixo: defina estrutura no { caracter dado ponteiro estrutura no proximo } tFilaSimples 4/11/2017 EDA - Prof. Paulemir Campos

21 EDA - Prof. Paulemir Campos
Filas: Alocação Dinâmica Criando uma fila unitária: ponteiro tFilaSimples func CriaFila(caracter novo){ ponteiro tFilaSimples inicio inicio = aloque(tFilaSimples) inicio->dado = novo inicio->proximo = NULL retorne inicio } 4/11/2017 EDA - Prof. Paulemir Campos

22 EDA - Prof. Paulemir Campos
Filas: Alocação Dinâmica Teste de fila vazia: booleano func FilaVazia(ponteiro tFilaSimples inicio){ se (inicio == NULL) retorne TRUE senao retorne FALSE } 4/11/2017 EDA - Prof. Paulemir Campos

23 EDA - Prof. Paulemir Campos
Filas: Alocação Dinâmica Enfileirando um elemento: ponteiro tFilaSimples func Enfileira (ponteiro tFilaSimples inicio; caracter elemento) { ponteiro tFilaSimples temp, novo temp = 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 = Elemento novo->proximo = temp->proximo temp->proximo = novo retorne inicio } 4/11/2017 EDA - Prof. Paulemir Campos

24 EDA - Prof. Paulemir Campos
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->proximo desaloque(inicio) retorne novoInicio } 4/11/2017 EDA - Prof. Paulemir Campos

25 EDA - Prof. Paulemir Campos
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. 4/11/2017 EDA - Prof. Paulemir Campos

26 EDA - Prof. Paulemir Campos
Referências 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. 4/11/2017 EDA - Prof. Paulemir Campos


Carregar ppt "Pilhas e Filas usando Alocação Estática e Dinâmica de Memória"

Apresentações semelhantes


Anúncios Google