tipos abstratos de dados implementando pilha e filacin.ufpe.br/~if669ec/aulas/aulaip-tad.pdf · tad...
TRANSCRIPT
![Page 1: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/1.jpg)
Introdução a Programação
Tipos Abstratos de Dados –
Implementando Pilha e Fila
![Page 2: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/2.jpg)
Abstração
2
Abstração é o processo ou resultado
de generalização por redução do
conteúdo da informação de um
conceito ou fenômeno observável,
normalmente para reter apenas a
informação que é relevante para um
propósito particular.
Fonte: Wikipedia
![Page 3: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/3.jpg)
Tópicos da Aula
Hoje aprenderemos que existe uma forma de
definir um tipo de dado pelas suas operações
Conceito de Tipo Abstrato de Dado
Dois Tipos Abstratos de Dados: Pilha e Fila
Depois aprenderemos como implementar Pilhas e
Filas
Implementação de Pilha usando Vetor
Implementação de Pilha usando Lista
Implementação de Fila usando Lista
3
![Page 4: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/4.jpg)
44
Tipo Abstrato de Dado
Um Tipo Abstrato de Dado (TAD) é umconjunto organizado de informações e asoperações que podem atuar sobre estasinformações
Define um novo tipo de dado
Um TAD é definido indiretamente pelasoperações que podem atuar nele e os efeitosdestas operações
![Page 5: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/5.jpg)
Exemplo de TAD: Pilha
Operações sobre Pilha (Livros) : inserção no topo e
remoção no topo
Tipo é definido pelo comportamento
Conjunto de operações sobre o tipo
5
InserçãoRemoção
![Page 6: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/6.jpg)
Exemplo de TAD: Fila
Operações sobre Fila (Pessoa) : inserção no fim e
remoção no começo
6
RemoçãoInserção
![Page 7: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/7.jpg)
77
TAD x Estrutura de Dado
O TAD é a descrição lógica de um dado e a estruturade dado é a descrição real
TAD (Tipo Abstrato de Dados) é a “figura lógica” dosdados e operações que manipulam os elementoscomponentes dos dados
Estrutura de Dados é a implementação real dos dadose algoritmos que manipulam os elementos dos dados
TAD descrição das funcionalidades
Estrutura de Dado implementação
![Page 8: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/8.jpg)
8
Objetivos deTADs
Abstrair (esconder) de quem usa um determinado tipo,
a forma concreta com que ele foi implementado
O cliente utiliza o TAD de forma abstrata, apenas com base
nas funcionalidades oferecidas pelo tipo (interface)
Desacoplar a implementação do uso, facilitando a
manutenção e aumentando o potencial de reuso do tipo
criado
![Page 9: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/9.jpg)
99
Implementando um TAD
As operações definem a interface de um TAD
Um código implementa corretamente um TADdesde que obedeça o que está sendo definidona interface do TAD
![Page 10: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/10.jpg)
10
Tipos Abstratos de Dados em C
Em C:
Arquivos-fontes que agrupam funções afins são
geralmente denominados de Módulos
Em programas modulares, cada módulo deve ser
compilado separadamente e depois “linkados” para
gerar executável
Quando módulo define um novo tipo de dado e o
conjunto de operações para manipular dados deste
tipo, dizemos que o módulo representa um Tipo
Abstrato de Dado (TAD)
![Page 11: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/11.jpg)
11
Implementando TADs em C
Geralmente a interface de um TAD é descrita em Cnos arquivos .h
O cliente só precisa dar um “include” no .h quecontém a interface do TAD
Ao cliente também é dado o arquivo objeto (.o) com aimplementação do TAD
Esconde (Abstrai) a implementação
A interface de um TAD contém as assinaturas dasfunções que ele oferece e contém a definição do tipode dado
Funciona como um “manual de uso” do tipo que está sendodefinido
![Page 12: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/12.jpg)
1212
Pilha é um tipo abstrato de dados onde:
Inserção e remoção de elementos no topo da
pilha
O primeiro elemento que sai é o último que entrou
(LIFO)
Operações básicas: push (empilhar) e pop
(desempilhar)
Definição de Pilha
![Page 13: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/13.jpg)
1313
Funcionamento da pilha
topo
topotopo
topo
empilha(a)
a
empilha(b)
a
b
empilha(c)
a
b
c
desempilha()
a
b
cc
![Page 14: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/14.jpg)
1414
Exemplo de Uso: Pilha de Execução de
Funções
#include “stdio.h”
int fat ( int n ) ;
int main () {
int n = 5, r ;
r = fat(n) ;
printf ( “ Fatorial = %d \n ”, r ) ;
return 0 ;
}
int fat ( int n ){
int f=1 ;
while(n != 0) {
f *= n ;
n-- ;
}
return f ;
}
![Page 15: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/15.jpg)
1515
1 – Início do programa:pilha vazia
main>
2 – Declaração de variáveis: n,r
main>5n
r -
3 – Chamada da função:empilha variáveis
main>5n
r -5fat>
n
4 – Final do laço
main>5n-0fat> n
r
f 120
5 – Retorno da função:desempilha
main>5n
120fat>
r
Pilha de Execução
Acesso às variáveis queestão na função do topo
![Page 16: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/16.jpg)
1616
Interface do tipo Pilha
Criar pilha vazia;
Inserir elemento no topo
(push)
Remover elemento do
topo (pop)
Verificar se a pilha está
vazia
Liberar a estrutura de
pilha
Em C/* pilha.h */
typedef struct pilha Pilha;
Pilha* pilha_cria();
void pilha_push(Pilha* p,float v);
float pilha_pop(Pilha* p);
int pilha_vazia(Pilha* p);
void pilha_libera(Pilha* p);
![Page 17: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/17.jpg)
1717
Implementação do tipo Pilha
Existem várias implementações possíveis de
uma pilha. Podem diferir da natureza dos
elementos, maneira como são armazenados
e operações disponíveis
Iremos estudar 2 tipos de implementação:
Utilizando Vetor
Utilizando Lista Encadeada
![Page 18: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/18.jpg)
1818
Implementando Pilha com Vetor
Estrutura que representa pilha
deve ser composta por um vetor
para armazenar os elementos e
o número de elementos
armazenados
Vantagem
Simplicidade
Desvantagens
Deve-se saber de antemão o
número máximo de elementos
Desperdício de espaço de memória
#define N 50
struct pilha {
int n;
float vet[N];
};
![Page 19: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/19.jpg)
1919
Pilha* pilha_cria ()
{
Pilha* p = (Pilha*) malloc(sizeof(Pilha));
p->n = 0;
return p;
}
Implementando Pilha com Vetor
Função de Criação
Aloca estrutura dinamicamente
Inicializa com 0 elementos
![Page 20: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/20.jpg)
2020
void pilha_push (Pilha* p, float v) {
if (p->n < N) {
p->vet[p->n] = v;
p->n++;
} else {/* capacidade esgotada */
printf(“Capacidade da pilha estourou.\n”);
}
}
Implementando Pilha com Vetor
Função de InserçãoVerifica se tem espaço disponível
Insere na próxima posição livre e incrementa o número
de elementos da pilha
![Page 21: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/21.jpg)
2121
float pilha_pop (Pilha* p)
{
float v;
if (pilha_vazia(p)) {
printf(“Pilha vazia.\n”);
exit(1);
}
v = p->vet[p->n-1];
p->n--;
return v;
}
Implementando Pilha com Vetor
Função de RemoçãoVerifica se a pilha está
vazia
Topo está na posição n - 1
Remoção se dá pelo decremento do número de elementos (próximo push
sobrescreverá antigo topo)
![Page 22: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/22.jpg)
2222
int pilha_vazia (Pilha* p) {
return (p->n==0);
}
Implementando Pilha com Vetor
Função que testa se pilha está vazia
void pilha_libera (Pilha* p) {
free(p);
}
Função que libera memória alocada para apilha
![Page 23: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/23.jpg)
2323
/* Função que informa o elemento do topo */
float pilha_topo (Pilha* p) {
return (p->vet[p->n – 1]);
}
Implementando Pilha com Vetor
Outras Funções Utilitárias
/* Função que imprime os elementos da pilha
void pilha_imprime (Pilha* p) {
int i;
for (i=p->n-1; i>=0; i--)
printf(“%f\n”, p->vet[i]);
}
![Page 24: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/24.jpg)
2424
Implementando Pilha com Lista
Estrutura que representa pilha
deve ser composta por um
ponteiro para o primeiro nó da
lista que armazena os
elementos
Vantagens
Otimização da memória
Tamanho irrestrito
Desvantagem
Complexidade na manipulação de
listas
typedef struct lista{
float info;
struct lista *prox;
} Lista;
struct pilha {
Lista *topo;
};
![Page 25: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/25.jpg)
2525
Pilha* pilha_cria () {
Pilha* p = (Pilha*) malloc(sizeof(Pilha));
p->topo = NULL;
return p;
}
Implementando Pilha com Lista
Função de CriaçãoLista(topo) é inicializada com NULL
![Page 26: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/26.jpg)
2626
void pilha_push (Pilha* p, float v) {
Lista* novo = (Lista*) malloc(sizeof(Lista));
novo->info = v;
novo->prox = p->topo;
p->topo = novo;
}
Implementando Pilha com Lista
Função de Inserção
Elemento é inserido no começo da lista – topo
aponta para o começo da lista
![Page 27: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/27.jpg)
2727
float pilha_pop (Pilha* p) {
Lista* t;
float v;
if (pilha_vazia(p)) {
printf(“Pilha vazia.\n”);
exit(1); /* aborta programa */
}
t = p->topo;
v = t->info;
p->topo = t->prox;
free(t);
return v;
}
Implementando Pilha com Lista
Função de Remoção
Elemento é realmente removido, topo é
atualizado
![Page 28: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/28.jpg)
2828
int pilha_vazia (Pilha* p) {
return (p->topo == NULL);
}
Implementando Pilha com Lista
Função que testa se pilha está vazia
void pilha_libera (Pilha* p) {
Lista* q = p->topo;
while (q!=NULL) {
Lista* t = q->prox;
free(q);
q = t;
}
free(p);
}
Função que libera memória alocada para apilha
Deve-se liberar todos os elementos da lista primeiro
![Page 29: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/29.jpg)
2929
/* Função que informa o elemento do topo */
float pilha_topo (Pilha* p) {
return (p->topo->info);
}
Implementando Pilha com Lista
Outras Funções Utilitárias
/* Função que imprime os elementos da pilha
void pilha_imprime (Pilha* p) {
Lista* q;
for (q=p->topo; q!= NULL; q = q->prox)
printf(“%f\n”, q->info);
}
![Page 30: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/30.jpg)
30
Definição de Fila
Fila é um tipo abstrato de dados onde:
Inserção de elementos se dá no final e a
remoção no início
O primeiro elemento que entra é o primeiro
que sai (FIFO)
Ex de uso : fila de impressão
![Page 31: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/31.jpg)
31
Funcionamento da Fila
início
1- insere(a)
2- insere(b)
a
b
c
fim
a
início
fim
3- insere(c)
fim
ba
início
4- retira( )
início
b
fim
ca
![Page 32: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/32.jpg)
32
Interface do tipo Fila
Em C/* fila.h */
typedef struct fila Fila;
Fila* fila_cria();
void fila_insere(Fila* f,float v);
float fila_retira(Fila* f);
int fila_vazia(Fila* f);
void fila_libera(Fila* f);
Criar uma fila vazia
Inserir um elemento no
fim
Retirar o elemento do
início
Verificar se a fila está
vazia
Liberar a fila
![Page 33: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/33.jpg)
33
Implementando Fila com Lista
Estrutura que representa fila
deve ser composta por 2
ponteiros para a lista que
armazena os elementos.
Um aponta para o primeiro
elemento e o outro para o último
elemento
typedef struct lista{
float info;
struct lista *prox;
} Lista;
struct fila {
Lista *ini;
Lista *fim
};
info1 info3info2
ini fim
![Page 34: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/34.jpg)
34
Fila* fila_cria ( ) {
Fila* f = (Fila*) malloc(sizeof(Fila));
f->ini = f->fim = NULL;
return f;
}
Implementando Fila com Lista
Função de Criação
ini e fim são inicializados com NULL
![Page 35: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/35.jpg)
35
void fila_insere (Fila* f, float v) {
Lista* novo = (Lista*) malloc(sizeof(Lista));
novo->info = v;
novo->prox = NULL; /* novo nó passa a ser o
último */
if (!fila_vazia(f)) /* verifica se a fila não
estava vazia */
f->fim->prox = novo;
else
f->ini = novo;
f->fim = novo;
}
Implementando Fila com Lista
Função de Inserção
Se a fila estava vazia novo elemento passa a ser o começo da fila
Novo elemento sempre é o último da fila
![Page 36: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/36.jpg)
36
float fila_retira (Fila* f) {
Lista* t;
float v;
if (fila_vazia(f)) {
printf("Fila vazia.\n"); exit(1);
}
t = f->ini;
v = t->info;
f->ini = t->prox;
if (f->ini == NULL)
f->fim = NULL;
free(t);
return v;
}
Implementando Fila com Lista
Função de Remoção
Se a fila ficou vazia, deve-se atualizar
ponteiro para o fim
![Page 37: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/37.jpg)
37
int fila_vazia (Fila* f) {
return (f->ini == NULL);
}
Implementando Fila com Lista
Função que testa se a fila está vazia
void fila_libera (Fila* f) {
Lista* q = f->ini;
while (q!=NULL) {
Lista* t = q->prox;
free(q);
q = t;
}
free(f);
}
Função que libera memória alocada para afila
Deve-se liberar todos os elementos da lista primeiro
![Page 38: Tipos Abstratos de Dados Implementando Pilha e Filacin.ufpe.br/~if669ec/aulas/aulaIP-TAD.pdf · TAD x Estrutura de Dado O TAD é a descrição lógica de um dado e a estrutura de](https://reader031.vdocuments.net/reader031/viewer/2022021700/5c12e4fb09d3f2587a8bcd43/html5/thumbnails/38.jpg)
38
/* Função que informa o primeiro elemento da fila
*/
float fila_primeiro (Fila* f) {
return (f->ini->info);
}
Implementando Fila com Lista
Outras Funções Utilitárias
/* Função que imprime os elementos da fila
void fila_imprime (Fila* f) {
Lista* q;
for (q=f->ini; q!=NULL; q =q->prox)
printf(“%f\n”, q->info);
}