140 likes | 248 Views
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. Filas.
E N D
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
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”. ESTRUTURA DE DADOS Profa. Juliana Mafra
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
a0 a1 a2 ... 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 typedefinttelem; typedefstruct{ telem v[MAX]; int inicio; int final; } tfila; 0 1 2 MAX -1 final início ESTRUTURA DE DADOS Profa. Juliana Mafra
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 (tfilaf, telem *dado) { if (vazia(f)) return 0; *dado = f.v[f.inicio]; return (1); } ESTRUTURA DE DADOS Profa. Juliana Mafra
a0 a1 a2 ... Operações sobre Filas: Arranjos • Inserir um elemento no fim de uma fila 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); } 0 1 2 MAX -1 ESTRUTURA DE DADOS Profa. Juliana Mafra
a1 a2 ... Operações sobre Filas: Arranjos • Remover o elemento do início de uma fila a0 a3 3 inicio final int remover (tfila*f, telem *dado){ if (vazia(*f)) return0; *dado = f.v[F.inicio]; (f->inicio)++; return(1); } 0 1 2 MAX -1 ESTRUTURA DE DADOS Profa. Juliana Mafra
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
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ó. typedefint telem; typedefstruct no { telem dado; struct no* prox; } tno; typedefstruct fila { tno* inicio; tno* final; } tfila; 5 8 1 dado|prox dado|prox inicio final Indicador do fim da fila (referência null) ESTRUTURA DE DADOS Profa. Juliana Mafra
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 (tfilaf, telem * valor) { if (vazia(f)) return0; *valor = (f.inicio)->dado; return 1; } ESTRUTURA DE DADOS Profa. Juliana Mafra
9 novo nó Operações sobre Filas: Apontadores • Inserir um elemento no fim de uma fila 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 5 8 1 ESTRUTURA DE DADOS Profa. Juliana Mafra
1 9 2 Operações sobre Filas: Apontadores • Remover um elemento do início de uma fila 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