Profa. Juliana Mafra ([email protected]) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco
Feb 25, 2016
Profa. Juliana Mafra([email protected])
ESTRUTURA DE DADOS
03 de Outubro de 2009
Faculdade de Informática e Tecnologia de Pernambuco
Tipos Especiais de Listas
ESTRUTURA DE DADOS Profa. Juliana Mafra2
Filas
Filas
3
É uma lista linear em que todas as inserções são realizadas em um extremo da lista (fim), e todas as retiradas são realizados no outro extremo da lista (início).
São chamadas listas fifo (“first-in”, “first-out”).
Existe uma ordem linear para filas que é a “ordem de chegada”.
São utilizadas quando desejamos processar itens de acordo com a ordem “primeiro-que-chega, primeiro-atendido”.
ESTRUTURA DE DADOS Profa. Juliana Mafra
TAD Filas: Operações
4
Criar uma fila vazia
Testar se um fila está vazia
Obter o elemento do início de uma fila
Inserir um elemento no fim de uma fila
Remover o elemento do início de uma fila, retornando o elemento removido.
ESTRUTURA DE DADOS Profa. Juliana Mafra
Implementação de Filas: Arranjos
5
Os itens são armazenados em posições contíguas de memória.
A operação Inserir faz a parte de trás da fila expandir-se.
A operação Remover faz a parte da frente da fila contrair-se.
ESTRUTURA DE DADOS Profa. Juliana Mafra
#define MAX 10 typedef int telem; typedef struct{ telem v[MAX]; int inicio; int final; } tfila;
...a0 a1 a20 1 2 MAX -1
início final
Operações sobre Filas: Arranjos
6
Criar uma fila vazia
Obter o elemento do início da fila
ESTRUTURA DE DADOS Profa. Juliana Mafra
void criar (tfila *f){
f->inicio = 0; f->final = -1; }
int primeiro (tfila f, telem *dado) {
if (vazia(f)) return 0; *dado = f.v[f.inicio]; return (1); }
Operações sobre Filas: Arranjos
7
Inserir um elemento no fim de uma fila
ESTRUTURA DE DADOS Profa. Juliana Mafra
int inserir (tfila *f, telem valor) { if (f->final == MAX-1) return 0; (f->final)++; f->v[f->final] = valor; return(1); }
...a0 a1 a20 1 2 MAX -1
final
3
a3
inicio
Operações sobre Filas: Arranjos
8
Remover o elemento do início de uma fila
ESTRUTURA DE DADOS Profa. Juliana Mafra
int remover (tfila *f, telem *dado){ if (vazia(*f)) return 0; *dado = f.v[F.inicio]; (f->inicio)++; return(1); }
...a1 a20 1 2 MAX -1
final
3
a3
inicio
a0
Implementação de Filas: Arranjos
9
Problema: A fila tende a caminhar pela memória do computador, ocupando espaço na parte de trás e descartando espaço na parte da frente (overflow).
Solução: Imaginar o arranjo como um círculo (a primeira posição segue a última).
ESTRUTURA DE DADOS Profa. Juliana Mafra
Implementação de Filas: Apontadores
10
A fila é implementada por meio de nós.
Cada nó contém um item da fila e um apontador para outro nó.
ESTRUTURA DE DADOS Profa. Juliana Mafra
5 8 1
Indicador do fim da fila (referência null)
dado|prox dado|prox
finalinicio
typedef int telem; typedef struct no { telem dado; struct no* prox; } tno; typedef struct fila { tno* inicio; tno* final; } tfila;
Operações sobre Filas: Apontadores
11
Criar uma fila vazia
Obter o elemento do início de uma fila
ESTRUTURA DE DADOS Profa. Juliana Mafra
void criar (tfila *f) { f->inicio = f->final = NULL; }
int primeiro (tfila f, telem * valor) { if (vazia(f)) return 0; *valor = (f.inicio)->dado; return 1; }
Operações sobre Filas: Apontadores
12
Inserir um elemento no fim de uma fila
ESTRUTURA DE DADOS Profa. Juliana Mafra
int inserir (tfila *f, telem valor) { tno *novo; novo = (tno*) malloc(sizeof(tno)); novo->dado = valor; novo->prox = NULL;
(f->final)->prox = novo; f->final = novo; return 1; }
5 8 1
finalinicio
9novo nó
Operações sobre Filas: Apontadores
13
Remover um elemento do início de uma fila
ESTRUTURA DE DADOS Profa. Juliana Mafra
int remover (tfila *f, telem *valor){ tno *atual; if (vazia(*f)) return 0; *valor = (f.inicio)->dado;
atual = f->inicio; f->inicio = (f->inicio)->prox; free(atual); return 1; }
1 29
finalinicio
atual