Profa. Juliana Mafra (jmafra.pe@gmail.com) Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS Profa. Juliana Mafra (jmafra.pe@gmail.com) 03 de Outubro de 2009
Tipos Especiais de Listas Filas ESTRUTURA DE DADOS Profa. Juliana Mafra Estrutura de Dados
Filas É 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”. O modelo intuitivo de uma fila é o de uma fila de espera em que as pessoas no início da filas são servidas primeiro e as pessoas que chegam entram no fim da fila. ESTRUTURA DE DADOS Profa. Juliana Mafra Estrutura de Dados
TAD Filas: Operações 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 Estrutura de Dados
Implementação de Filas: Arranjos 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. #define MAX 10 typedef int telem; typedef struct{ telem v[MAX]; int inicio; int final; } tfila; ... a0 a1 a2 1 2 MAX -1 início final ESTRUTURA DE DADOS Profa. Juliana Mafra Estrutura de Dados
Operações sobre Filas: Arranjos Criar uma fila vazia Obter o elemento do início da fila 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); } ESTRUTURA DE DADOS Profa. Juliana Mafra Estrutura de Dados
Operações sobre Filas: Arranjos Inserir um elemento no fim de uma fila ... a0 a1 a2 1 2 MAX -1 a3 3 inicio final int inserir (tfila *f, telem valor) { if (f->final == MAX-1) return 0; (f->final)++; f->v[f->final] = valor; return(1); } ESTRUTURA DE DADOS Profa. Juliana Mafra Estrutura de Dados
Operações sobre Filas: Arranjos Remover o elemento do início de uma fila ... a1 a2 1 2 MAX -1 a0 a3 3 inicio final int remover (tfila *f, telem *dado){ if (vazia(*f)) return 0; *dado = f.v[F.inicio]; (f->inicio)++; return(1); } ESTRUTURA DE DADOS Profa. Juliana Mafra Estrutura de Dados
Implementação de Filas: Arranjos 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 Estrutura de Dados
Implementação de Filas: Apontadores A fila é implementada por meio de nós. Cada nó contém um item da fila e um apontador para outro nó. typedef int telem; typedef struct no { telem dado; struct no* prox; } tno; typedef struct fila { tno* inicio; tno* final; } tfila; 5 8 1 Indicador do fim da fila (referência null) dado|prox inicio final ESTRUTURA DE DADOS Profa. Juliana Mafra Estrutura de Dados
Operações sobre Filas: Apontadores Criar uma fila vazia Obter o elemento do início de uma fila 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; } ESTRUTURA DE DADOS Profa. Juliana Mafra Estrutura de Dados
Operações sobre Filas: Apontadores Inserir um elemento no fim de uma fila 5 8 1 9 novo nó 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; } inicio final ESTRUTURA DE DADOS Profa. Juliana Mafra Estrutura de Dados
Operações sobre Filas: Apontadores Remover um elemento do início de uma fila 1 2 9 atual 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; } inicio final ESTRUTURA DE DADOS Profa. Juliana Mafra Estrutura de Dados