profa. juliana mafra ([email protected]) estrutura de dados 03 de outubro de 2009 faculdade de...

13
Profa. Juliana Mafra ([email protected]) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco

Upload: internet

Post on 19-Apr-2015

103 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco

Profa. Juliana Mafra

([email protected])

ESTRUTURA DE DADOS

03 de Outubro de 2009

Faculdade de Informática e Tecnologia de Pernambuco

Page 2: Profa. Juliana Mafra (jmafra.pe@gmail.com) 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

Page 3: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco

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

Page 4: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco

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

Page 5: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco

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

Page 6: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco

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); }

Page 7: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco

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 a2

0 1 2 MAX -1

final

3

a3

inicio

Page 8: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco

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 a2

0 1 2 MAX -1

final

3

a3

inicio

a0

Page 9: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco

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

Page 10: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco

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;

Page 11: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco

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; }

Page 12: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco

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ó

Page 13: Profa. Juliana Mafra (jmafra.pe@gmail.com) ESTRUTURA DE DADOS 03 de Outubro de 2009 Faculdade de Informática e Tecnologia de Pernambuco

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