estrutura de dados -...
TRANSCRIPT
![Page 2: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/2.jpg)
Estruturas de Dados
Listas e Filas
2
![Page 3: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/3.jpg)
Estrututuras de dados lineares
![Page 4: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/4.jpg)
Pilhas
Pilhas (stack)
Estrutura de dados onde a inserção e remoção de elementos ocorre a partir de uma único ponto de interação – o topo da pilha
LIFO ◦ Last In First Out
Exemplos ◦ Pilha de pratos a lavar
◦ Pilha de execução na linguagem C
Variáveis locais são empilhadas em uma pilha
Ao término da função, as variáveis são desempilhadas
4
![Page 5: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/5.jpg)
Pilhas
Operações ◦ Empilhar (push)
Insere um novo elemento no topo da pilha
◦ Desempilhar (pop)
Recupera e remove um elemento do topo da pilha
5
![Page 6: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/6.jpg)
Listas 6
Lista sequencial
Lista encadeada
![Page 7: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/7.jpg)
Listas
Lista sequencial ◦ Acesso a qualquer elemento em tempo constante
◦ Movimentação e inserção custosa
◦ Tamanho máximo definido
◦ Ideal para:
Listas de tamanho conhecido (pequenas), inserção remoção no fim
7
![Page 8: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/8.jpg)
Listas
Lista encadeada ◦ Não precisa deslocar elementos nas operações de inserção e remoção
◦ Crescimento em tempo de execução
◦ Limite é a memória disponível
◦ Acesso a elementos, porém, requer busca prévia
◦ Ideal para:
Listas grandes, inserção/remoção no meio, sem tamanho máximo definido
8
![Page 9: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/9.jpg)
Listas encadeadas
Ponteiros
9
typedef struct no {
t_elemento dado; // elemento contendo os dados
struct no * prox; // ponteiro para o proximo elemento
} t_no; // tipo da estrutura
t_no * p;
![Page 10: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/10.jpg)
Listas encadeadas 10
free(P);
P = NULL;
![Page 11: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/11.jpg)
Lista encadeada 11
// Tipo base dos elementos da lista
typedef struct elementos {
char nome[50];
// Outros elementos
} t_elemento;
// Estrutura lista
typedef struct no {
t_elemento dado; // elemento contendo os dados
struct no * prox; // ponteiro para o proximo elemento
} t_no; // tipo da estrutura
// define t_lista como sendo um outro nome para "t_no *"
typedef t_no* t_lista;
![Page 12: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/12.jpg)
12
t_no * criaNo() {
t_no * no = (t_no*) malloc(sizeof(t_no));
if (no)
no->prox = NULL;
return no;
}
int isVazia(t_lista lista) {
return (lista == NULL);
}
int getTamanho(t_lista lista) {
int n = 0;
while (lista != NULL) {
lista = lista->prox;
n++;
}
return n;
}
![Page 13: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/13.jpg)
Lista encadeada 13
t_no * getNo(t_lista lista, int pos) {
int n = 0;
if (pos<0)
return 0;
while (lista != NULL) {
if (n==pos)
return lista;
lista = lista->prox;
n++;
}
return 0;
}
![Page 14: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/14.jpg)
Lista encadeada 14
t_elemento * getElemento(t_lista lista, int pos)
{
t_no * no = getNo(lista, pos);
if (no != NULL)
return &(no->dado);
else
return NULL;
}
![Page 15: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/15.jpg)
Lista encadeada 15
int getPosicao(t_lista lista, t_elemento dado) {
int n = 0;
while (lista != NULL) {
if (compara(lista->dado, dado)==0)
return n;
lista = lista->prox;
n++;
}
return -1;
}
int compara(t_elemento dado1, t_elemento dado2) {
return strcmp(dado1.nome, dado2.nome);
}
![Page 16: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/16.jpg)
Lista encadeada: implementação
16
int inserir(t_lista *lista, int pos, t_elemento dado) {
t_no * p, * novo;
if (pos == 0) {
novo = criaNo();
if (novo == NULL)
return 0;
novo->dado = dado;
novo->prox = *lista;
*lista = novo;
return 1;
}
p = getNo(*lista, pos-1);
if (p == NULL)
return 0;
novo = criaNo();
if (novo == NULL)
return 0;
novo->dado = dado;
novo->prox = p->prox;
p->prox = novo;
return 1;
}
![Page 17: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/17.jpg)
Lista encadeada 17
int remover(t_lista *lista, int pos) {
t_no *anterior, *p;
if (isVazia(*lista)) return 0; // erro: lista vazia
if (pos<0) return 0; // erro: posicao invalida
// remocao da primeira posicao em lista nao vazia
if (pos == 0) {
p = *lista;
*lista = p->prox;
} else { // remocao em qualquer posicao
anterior = getNo(*lista, pos-1);
if (anterior == NULL)
return 0; // erro: posicao invalida
p = anterior->prox;
if (p == NULL)
return 0; // erro: posicao invalida
anterior->prox = p->prox;
}
free(p);
return 1;
}
![Page 18: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/18.jpg)
Listas
Distribuição na memória ◦ Sequencial
◦ Encadeada
Tamanho ◦ Estática
◦ Dinâmica
Ordenamento ◦ Ordenada
◦ Desordenada
18
![Page 19: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/19.jpg)
Listas ordenadas
Implementação sequencial ou encadeada
Nós ordenados de acordo com os dados que possuem e uma lógica de ordenação
Complexidade de implementação comparável com as não ordenadas
Diferente apenas na operação de inserção ◦ Não é necessário passar a posição de inserção
◦ É efetuada uma busca pela posição correta
19
![Page 20: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/20.jpg)
Lista encadeada ordenada 20
int getPosicaoInsercaoOrdenada(t_lista lista, t_elemento dado)
{
int n = 0;
while (lista != NULL) {
if (compara(lista->dado, dado)>=0)
return n;
lista = lista->prox;
n++;
}
// lista vazia, ou nao achou elemento, retorna posicao zero
return n;
}
![Page 21: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/21.jpg)
Listas encadeadas
Listas circulares
21
![Page 22: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/22.jpg)
Listas circulares
Último elemento aponta para o primeiro, e não mais para NULL
É possível atingir qualquer elemento da lista a partir de qualquer nó.
Convencionalmente utiliza-se como ponteiro para a lista um ponteiro para o último elemento. ◦ Tem-se acesso direto ao “último” e “primeiro” elemento.
22
![Page 23: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/23.jpg)
Lista encadeada 23
Lista duplamente encadeada
Lista circular duplamente encadeada
![Page 24: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/24.jpg)
Lista duplamente encadeada 24
// Tipo base dos elementos da lista
typedef struct elementos {
char nome[50];
} t_elemento;
// Estrutura lista
typedef struct no {
struct no * anterior; // ponteiro para o proximo elemento
t_elemento dado; // elemento contendo os dados
struct no * prox; // ponteiro para o proximo elemento
} t_no; // tipo da estrutura
![Page 25: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/25.jpg)
Lista duplamente encadeada
É possível percorrer a lista em ordem inversa
O nó atual acessa o antecessor e o sucessor
Último e primeiro nós são equivalentes
Desvantagem: Mais memória com o ponteiro extra
25
![Page 26: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/26.jpg)
Filas
Conjunto de itens onde o acesso a elementos é feito em uma extremidade (início da fila) e as inserções de elementos são realizadas na outra extremidade (final da fila)
First in, first out (FIFO) Lista linear em que a inserção é feita
numa extremidade e a eliminação na outra.
26
![Page 27: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/27.jpg)
Filas
Fila de um banco Fila do cinema Fila de atendimento
◦ Quem primeiro entrar na fila, é o primeiro a ser atendido (a sair da fila).
Grupo de carros esperando sua vez para passar no pedágio
Gerenciador de impressão num ambiente multiusuário (impressora compartilhada)
Escalonamento de tarefas: fila de processos aguardando os recursos do sistema operacional.
Fila de pacotes a serem transmitidos numa rede de computadores
27
![Page 28: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/28.jpg)
Filas
Implementação ◦ Realizada a partir de uma lista com duas cabeças (ponteiros).
◦ A implementação encadeada dinâmica torna mais simples as operações de inserção e remoção.
◦ Já a implementação sequencial é um pouco mais complexa, mas pode ser usada quando há previsão do tamanho máximo da fila.
28
![Page 29: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/29.jpg)
Filas
Fila sequencial ◦ Um vetor de elementos
◦ Um campo para controlar o início da fila
◦ Outro campo para controlar o final da fila
29
![Page 30: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/30.jpg)
Filas 30
![Page 31: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/31.jpg)
Filas
Existem mais dois elementos livres na fila, mas nenhum outro elemento pode ser inserido
Fila.final chegou à condição de limite (MAX -1)
Podemos chegar à situação absurda em que a fila está vazia, mas nenhum elemento novo pode ser inserido
A representação sequencial descrita anteriormente não é adequada
31
![Page 32: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/32.jpg)
Filas
Problemas… Existem mais dois elementos livres na fila,
mas nenhum outro elemento pode ser inserido
Fila.final chegou à condição de limite (MAX -1)
Podemos chegar à situação absurda em que a fila está vazia, mas nenhum elemento novo pode ser inserido.
Conclusão: A representação sequencial descrita anteriormente não é adequada!
32
![Page 33: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/33.jpg)
Fila circular 33
Forçar final a usar o espaço liberado na frente
Para permitir a reutilização das posições já ocupadas, usa-se o conceito de Fila Circular
x x x x x
fim inicio
![Page 34: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/34.jpg)
Fila circular
Fila cheia?
Quando o fim == (inicio-1) ou
Se o inicio for zero?
Quando o fim == (MAX-1);
O ponteiro do fim não pode passar pelo do inicio;
34
x x x x x
fim inicio
![Page 35: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/35.jpg)
Filas - Implementação
Operações ◦ Criar fila
◦ Verificar se fila está vazia
◦ Verificar se fila está cheia
◦ Inserir item na fila
◦ Remover item da fila
◦ Exibir fila
◦ Esvaziar fila
35
![Page 36: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/36.jpg)
Fila sequencial 36
// tamanho maximo da fila
#define MAX 5
// Tipo base dos elementos da fila
typedef struct elementos {
char nome[50];
} t_elemento;
typedef struct fila {
t_elemento vetor[MAX]; // vetor que armazena a fila
int inicio; // posicao do primeiro elemento
int fim; // posicao do ultimo elemento
int quant_element; // numero de elementos da fila
} t_fila;
![Page 37: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/37.jpg)
Fila sequencial 37
t_fila criar()
{
t_fila fila;
fila.inicio = 0;
fila.fim = -1;
fila.quant_element = 0;
return fila;
}
int isVazia (t_fila * fila)
{
return (fila->quant_element == 0);
}
int isCheia(t_fila * fila)
{
return (fila->quant_element == MAX);
}
![Page 38: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/38.jpg)
Fila sequencial 38
int inserir (t_fila * fila, t_elemento valor)
{
if (isCheia(fila))
return 0;
(fila->quant_element)++;
fila->fim = (fila->fim + 1) % MAX;
fila->vetor[fila->fim] = valor;
return 1;
}
t_elemento remover(t_fila * fila)
{
t_elemento valor = { "" } ;
if (isVazia(fila))
return valor; // Erro: fila vazia
valor = fila->vetor[fila->inicio];
fila->vetor[fila->inicio].nome[0] = '\0';// zera, opcional
(fila->quant_element)--;
fila->inicio = (fila->inicio + 1) % MAX;
return valor;
}
![Page 39: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/39.jpg)
Fila sequencial 39
void exibir(t_fila * fila) {
int i;
if (isVazia(fila)) {
printf("Fila vazia\n");
return;
}
printf("\nExibindo fila:\n");
printf("inicio: %d\n", fila->inicio);
printf("fim: %d\n", fila->fim);
for (i=0 ; i<MAX ; i++) {
printf("%d::%s\n", i, fila->vetor[i].nome);
}
}
![Page 40: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/40.jpg)
Fila encadeada
Lista simplesmente encadeada “especial”
Para remover da fila, implementa-se uma função que retira sempre do início
Para inserir na fila, implementa-se uma função que acrescenta sempre no final
40
![Page 41: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/41.jpg)
Fila encadeada
Lista simplesmente encadeada – Desvantagem: Para cada elemento inserido na fila, teremos
que percorrer todos os nós até encontrar o último. Não é interessante
Lista simplesmente encadeada com dois ponteiros;
–Desvantagem: ter dois ponteiros Lista simplesmente encadeada circular
–Único ponteiro para o final da fila Lista simplesmente encadeada com cabeça especial.
–Um único ponteiro para a cabeça especial, e, essa cabeça é que tem o ponteiro para o inicio e o fim
41
![Page 42: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/42.jpg)
Fila encadeada
Características ◦ Ponteiro para o primeiro nó;
◦ Ponteiro para o último nó;
◦ Informação sobre a quantidade de elementos da lista.
42
![Page 43: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/43.jpg)
Fila encadeada
Operações ◦ Criar fila
◦ Verificar se fila está vazia
◦ Inserir item na fila
◦ Remover item da fila
◦ Exibir fila
◦ Esvaziar fila
43
![Page 44: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/44.jpg)
Fila encadeada 44
// Tipo base dos elementos da lista
typedef struct elementos {
char nome[50];
} t_elemento;
typedef struct no {
t_elemento dado;
struct no * prox;
} t_no;
typedef struct fila {
t_no* inicio;
int quant_element;
t_no* final;
} t_fila;
![Page 45: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/45.jpg)
Fila encadeada 45
t_fila * criaCabeca ()
{
t_fila * fila = (t_fila*) malloc(sizeof(t_fila));
if (fila) {
fila->inicio = fila->final = NULL;
fila->quant_element=0;
}
return fila;
}
t_no * criaNo() {
t_no * no = (t_no*) malloc(sizeof(t_no));
// verifica se houve memoria suficiente para alocar
if (no)
no->prox = NULL;
return no;
}
![Page 46: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/46.jpg)
Fila encadeada 46
int isVazia (t_fila * fila)
{
return (fila->quant_element == 0);
}
int inserir (t_fila *fila, t_elemento valor) {
t_no *novo;
novo = criaNo();
if (novo == NULL)
return 0; // Erro: memoria insuficiente
novo->dado = valor;
if (isVazia(fila))
fila->inicio = novo;
else
(fila->final)->prox = novo;
fila->final = novo;
fila->quant_element++;
return 1;
}
![Page 47: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/47.jpg)
Fila encadeada 47
t_elemento remover (t_fila *fila)
{
t_no *aux;
t_elemento valor = { "" } ;
if (isVazia(fila))
return valor; // Erro: fila vazia
valor = (fila->inicio)->dado;
if (fila->inicio == fila->final)
fila->final = NULL;
aux = fila->inicio;
fila->inicio = (fila->inicio)->prox;
free(aux);
fila->quant_element--;
return valor;
}
![Page 48: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/48.jpg)
Fila de prioridade
Filas de prioridade – A fila fica ordenada por ordem de prioridade.
– A operação de inserção não insere somente no final, pode ser em qualquer posição obedecendo a ordem de prioridade.
– A operação de remoção remove sempre o primeiro elemento.
– Implementação:
• Remoção rápida: O(1)
• Inserção lenta: O(n), ou O(log n). Depende da implementação. Para atingir O(log n) teria que ser implementada usando árvores na implementação encadeada; ou busca binária na implementação sequencial.
48
![Page 49: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/49.jpg)
Próximas aulas
Estruturas de dados não lineares
49
![Page 50: Estrutura de Dados - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/ed-aula09-listas_e_filas.pdf · Notas de Aula do Prof. Derzu Omaia 50 . Estrutura de Dados Carlos Eduardo](https://reader034.vdocuments.net/reader034/viewer/2022050916/5a72f6777f8b9a9d538e2c19/html5/thumbnails/50.jpg)
Referências
Notas de Aula do Prof. Bruno B. Boniati
Notas de Aula do Prof. João Luís Garcia Rosa
Notas de Aula do Prof. Derzu Omaia
50