Aula T12 – BCC202 Listas Túlio Toffolo

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

Aula T10 – BCC202 Listas – Parte 2 Túlio Toffolo www. decom. ufop
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
O TAD fila O TAD fila armazena objetos arbitrários
Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
Listas encadeadas Prof. Rosana Palazon.
Algoritmos de manipulação de estruturas elementares de dados
Listas duplamente encadeadas
Programação II Estruturas de Dados
ESTRUTURAS DO TIPO FILA
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
Filas David Menotti Estruturas de Dados I DECOM – UFOP.
Pesquisa em Memória Primária – Árvores de Busca
Aula T11 – BCC202 Pilhas Túlio Toffolo
David Menotti Estruturas de Dados I DECOM – UFOP
Pilha David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária – Árvores de Busca
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
LPG - I: Alocação Dinâmica de Memória - Ponteiros
AED – Algoritmos e Estruturas de Dados
FILAS (Queues) Estrutura linear de acesso seqüencial que ordena seus elementos pela seqüência cronológica de sua entrada; Estrutura FIFO (First In First.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Listas com Ponteiros Listas encadeadas Listas circulares.
Slides: Prof. João Fabro UTFPR - Curitiba
Lista Encadeada Circular Lista Duplamente Encadeada
Listas Encadeadas.
Algoritmos e Estruturas de Dados
ALGORITMOS E ESTRUTURAS DE DADOS
Professor Reverton de Paula Faculdade Anhanguera de Indaiatuba
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
Algoritmos e Estruturas de Dados
Pesquisa em Memória Primária
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
INTELIGÊNCIA ARTIFICIAL
Árvores Binárias de Pesquisa
TAD Pilha com Alocação Dinâmica de Memória
Implementação de FILAS com Alocação Dinâmica
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
Denise Guliato Faculdade de Computação – UFU
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Estruturas de Dados Aula 9: Listas (parte 1)
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Estruturas de Dados Aula 11: TAD Pilha
Árvore Binária de Busca
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Tabelas Hash Prof. Túlio Toffolo
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Estruturas de Dados Aula 15: Árvores
Estruturas de Dados Aula 10: Listas (parte 2) 07/05/2014.
Objetivos Ao concluir esta Disciplina espera-se que os alunos sejam capazes de: Distinguir os conceitos de Estrutura e Dados; Compreender o que são, como.
Estrutura de dados Pilhas e filas
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
11 Pilhas, Filas e Listas Duplamente Encadeadas Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Estrutura de Dados Prof. André Cypriano M. Costa
UNIVERSIDADE FEDERAL DE MINAS GERAIS Pilhas e Filas Cristiano Arbex Valle Vinicius Fernandes dos Santos
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Listas Lineares Cristiano Arbex Valle Vinicius Fernandes dos Santos
Transcrição da apresentação:

Aula T12 – BCC202 Listas Túlio Toffolo www.decom.ufop.br/toffolo

O que é uma fila? 1 4 3 2 Fila 1 2 3 4

O que é uma fila? Fila 1 2 3 4

O que é uma fila? 1 Fila 2 3 4

O que é uma fila? 2 1 Fila 3 4

O que é uma fila? 2 1 3 Fila 4

(FIFO – First in First Out) TAD Fila Tipo Abstrato de dados com a seguinte característica: O primeiro elemento a ser inserido é o primeiro a ser retirado/ removido (FIFO – First in First Out) Analogia: fila bancária, fila do cinema. Usos: Sistemas operacionais: fila de impressão, processamento

TAD Fila Operações: 1. FFVazia(Fila). Faz a fila ficar vazia. 2. FEnfileira(Fila, x). Insere o item x no final da fila. 3. FDesenfileira(Fila, x). Retorna o item x no início da fila, retirando-o da fila. 4. FEhVazia(Fila). Esta função retorna true se a fila está vazia; senão retorna false.

Implementação de Filas através de Arranjos Os itens são armazenados em posições contíguas de memória. A operação Enfileira faz a parte de trás da fila expandir-se. A operação Desenfileira faz a parte da frente da fila contrair-se. 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.

Implementação de Filas através de Arranjos Com poucas inserções e retiradas, a fila vai ao encontro do limite do espaço da memória alocado para ela. Solução: imaginar o array como um círculo. A primeira posição segue a última.

Implementação de Filas através de Arranjos A fila se encontra em posições contíguas de memória, em alguma posição do círculo, delimitada pelos apontadores Frente e Trás. (Frente indica a posição do primeiro elemento, trás a primeira posição vazia) Para enfileirar, basta mover o apontador Trás uma posição no sentido horário. Para desenfileirar, basta mover o apontador Frente uma posição no sentido horário.

Estrutura da Fila usando Arranjo #define MaxTam 1000 typedef int Apontador; typedef int TChave; typedef struct { TChave Chave; /* outros componentes */ } TItem; TItem vItem[MaxTam+1]; Apontador iFrente, iTras; } TFila;

Operações sobre Filas usando Posições Contínuas de Memória Nos casos de fila cheia e fila vazia, os apontadores Frente e Trás apontam para a mesma posição do círculo. Uma saída para distinguir as duas situações é deixar uma posição vazia no array. Neste caso, a fila está cheia quando Trás+1 for igual a Frente. void FFVazia(TFila* pFila) { pFila->iFrente = 0; pFila->iTras = pFila->iFrente; } /* FFVazia */ int FEhVazia(TFila* pFila) return (pFila->iFrente == pFila->iTras); } /* FEhVazia */

Operações sobre Filas usando Posições Contínuas de Memória int FEnfileira(TFila* pFila, TItem* pItem) { if (((pFila->iTras+1)%(MaxTam+1)) == pFila->iFrente) return 0; /* fila cheia */ pFila->vItem[pFila->iTras] = *pItem; pFila->iTras = (pFila->iTras + 1) % (MaxTam+1); /* if (pFila->iTras == MaxTam) pFila->iTras = 0; else pFila->iTras++; */ return 1; } /* FEnfileira */

Operações sobre Filas usando Posições Contínuas de Memória int FDesenfileira(TFila* pFila, TItem* pItem) { if (FEhVazia(pFila)) return 0; *pItem = pFila->vItem[pFila->iFrente]; pFila->iFrente = (pFila->iFrente + 1) % (MaxTam+1); /* if (pFila->iFrente == MaxTam) pFila->iFrente = 0; else pFila->iFrente++; */ return 1; } /* FDesenfileira */

Implementação de Filas usando Apontadores Há uma célula cabeça para facilitar a implementação das operações Enfileira e Desenfileira quando a fila está vazia. Quando a fila está vazia, os apontadores Frente e Trás apontam para a célula cabeça. Para enfileirar um novo item, basta criar uma célula nova, ligá-la após a célula que contém xn e colocar nela o novo item. Para desenfileirar o item x1, basta desligar a célula cabeça da lista e a célula que contém x1 passa a ser a célula cabeça.

Estrutura da Fila usando Apontadores A fila é implementada por meio de células Cada célula contém um item da fila e um apontador para outra célula. A estrutura TipoFila contém um apontador para a frente da fila (célula cabeça) e um apontador para a parte de trás da fila.

Estrutura da Fila usando Apontadores typedef int TChave; typedef struct TItem { TChave Chave; /* outros componentes */ } TItem; typedef struct Celula* Apontador; typedef struct Celula { TItem Item; struct Celula* pProx; } TCelula; typedef struct TFila { Apontador pFrente; Apontador pTras; } Tfila;

Operações sobre Filas usando Apontadores (com cabeça) void FFVazia(TFila* pFila) { pFila->pFrente = (Apontador)malloc(sizeof(TCelula)); pFila->pTras = pFila->pFrente; pFila->pFrente->pProx = NULL; } /* FFVazia */ int FEhVazia(TFila* pFila) return (pFila->pFrente == pFila->pTras); } /* FEhVazia */

Operações sobre Filas usando Apontadores (sem cabeça) void FFVazia(TFila* pFila) { pFila->pFrente = NULL; pFila->pTras = pFila->pFrente; } /* FFVazia */ int FEhVazia(TFila* pFila) return (pFila->pFrente == NULL); /* pFila->pTras == NULL */ } /* FEhVazia */

Operações sobre Filas usando Apontadores (com cabeça) int FEnfileira(TFila *pFila, TItem* pItem) { Apontador pNovo; pNovo = (Apontador)malloc(sizeof(TCelula)); if (pNovo == NULL) return 0; pFila->pTras->pProx = pNovo; pFila->pTras = pNovo; pNovo->Item = *pItem; return 1; } /* FEnfileira */

Operações sobre Filas usando Apontadores (sem cabeça) int FEnfileira(TFila *pFila, TItem* pItem) { Apontador pNovo; pNovo = (Apontador)malloc(sizeof(TCelula)); if (pNovo == NULL) return 0; if (pFila->pTras != NULL) pFila->pTras->pProx = pNovo; pFila->pTras = pNovo; pNovo->Item = *pItem; if (pFila->pFrente == NULL) pFila->pFrente = pNovo; return 1; } /* FEnfileira */

Operações sobre Filas usando Apontadores (com cabeça) int FDesenfileira(TFila* pFila, TItem* pItem) { Apontador pAux; if (FEhVazia(pFila)) return 0; pAux = pFila->pFrente; pFila->pFrente = pFila->pFrente->pProx; *pItem = pFila->pFrente->Item; free(pAux); return 1; } /* FDesenfileira */

Operações sobre Filas usando Apontadores (sem cabeça) int FDesenfileira(TFila* pFila, TItem* pItem) { Apontador pAux; if (FEhVazia(pFila)) return 0; pAux = pFila->pFrente; pFila->pFrente = pFila->pFrente->pProx; *pItem = pAux->Item; free(pAux); if (pFila->pFrente == NULL) pFila->pTras = NULL; return 1; } /* FDesenfileira */

Exercício Seja TLista o TAD Lista que implementa as seguintes funções: void FLVazia(TLista* pLista) (faz com que a lista fique vazia) void LInsere(TLista *pLista,TItem* pItem, int pos) (insere pItem na posição “pos” da lista) int LRetira(TLista* pLista, TItem* pItem, int pos) (retira o último item da lista e retorna em pItem) Implemente a TAD TFila utilizando TLista Esta implementação é eficiente? Justifique sua resposta.