David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP

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
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.
Listas duplamente encadeadas
TADS – Tipos Abstratos 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
Pesquisa em Árvores Digitais
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Filas David Menotti Estruturas de Dados I DECOM – UFOP.
Pesquisa em Memória Primária - Hashing
David Menotti Estruturas de Dados I DECOM – UFOP
HeapSort Filas de Prioridade – Heap
Pesquisa em Memória Primária – Árvores de Busca
Medida do Tempo de Execução de um Programa
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
Medida do Tempo de Execução de um Programa
David Menotti 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
Aula T12 – BCC202 Listas Túlio Toffolo
David Menotti Estruturas de Dados I DECOM – UFOP
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Pesquisa em Memória Primária
Construção de Compiladores
Listas com Ponteiros Listas encadeadas Listas circulares.
Instrutor: Nilo Menezes
Robson Godoi / Sandra Siebra
Listas Encadeadas.
Algoritmos e Estruturas de Dados
ALGORITMOS E ESTRUTURAS DE DADOS
Pesquisa em memória primária: hashing
Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
Algoritmos e Estruturas de Dados
LISTAS DUPLAMENTE ENCADEADAS
Pesquisa em Memória Primária
INTELIGÊNCIA ARTIFICIAL
TAD Pilha com Alocação Dinâmica de Memória
Implementação de FILAS com Alocação Dinâmica
Lista Encadeada Circular Lista Duplamente Encadeada
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
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Estruturas de Dados Aula 9: Listas (parte 1)
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.
Filas. #define MAXFILA 100 typedef struct queue { int item [ MAXFILA]; int inic, fim; } fila; fila q;
Estruturas de Dados Aula 15: Árvores
Estruturas de Dados Aula 10: Listas (parte 2) 07/05/2014.
Estrutura de Dados Aula 02 1.
Estrutura de Dados Aula 3 - Listas
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
Estrutura de Dados Prof. André Cypriano M. Costa
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
UNIVERSIDADE FEDERAL DE MINAS GERAIS Árvores Cristiano Arbex Valle Vinicius Fernandes dos Santos
Transcrição da apresentação:

David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP Listas Lineares David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP

Listas Lineares Uma das formas mais simples de interligar os elementos de um conjunto. Estrutura em que as operações inserir, retirar e localizar são definidas. Podem crescer ou diminuir de tamanho durante a execução de um programa, de acordo com a demanda. Itens podem ser acessados, inseridos ou retirados de uma lista.

Listas Lineares Duas listas podem ser concatenadas para formar uma lista única, ou uma pode ser partida em duas ou mais listas. Adequadas quando não é possível prever a demanda por memória, permitindo a manipulação de quantidades imprevisíveis de dados, de formato também imprevisível. São úteis em aplicações tais como manipulação simbólica, gerência de memória, simulações e compiladores.

Definição de Listas Lineares Seqüência de zero ou mais itens x1 ,x2 ,···,xn , na qual xi é de um determinado tipo e n representa o tamanho da lista linear. Sua principal propriedade estrutural envolve as posições relativas dos itens em uma dimensão. Assumindo n ≥ 1, x1 é o primeiro item da lista e xn é o último item da lista. xi precede xi+1 para i = 1,2,···,n – 1 xi sucede xi-1 para i = 2,3,···,n o elemento xi é dito estar na i-ésima posição da lista.

O conjunto de operações a ser definido depende de cada aplicação. TAD de Listas Lineares O que deveria conter? Representação do tipo da lista Conjunto de operações que atuam sobre a lista Algumas operações que deveriam fazer parte deste conjunto? O conjunto de operações a ser definido depende de cada aplicação.

TAD Listas Lineares Um conjunto de operações necessário a uma maioria de aplicações é: Criar uma lista linear vazia. Inserir um novo item imediatamente após o i-ésimo item. Retirar o i-ésimo item. Localizar o i-ésimo item para examinar e/ou alterar o conteúdo de seus componentes. Combinar duas ou mais listas lineares em uma lista única. Dividir uma lista linear em duas ou mais listas. Fazer uma cópia da lista linear. Ordenar os itens da lista em ordem ascendente ou descendente, de acordo com alguns de seus componentes. Pesquisar a ocorrência de um item com um valor particular em algum componente.

Exemplo de Protótipo para Operações Exemplo de Conjunto de Operações: FLVazia(Lista). Faz a lista ficar vazia. Insere(x, Lista). Insere x após o último item da lista. Retira(p, Lista, x). Retorna o item x que está na posição p da lista, retirando-o da lista e deslocando os itens a partir da posição p+1 para as posições anteriores. Vazia(Lista). Esta função retorna true se lista vazia; senão retorna false. Imprime(Lista). Imprime os itens da lista na ordem de ocorrência.

Implementações de Listas Lineares Várias estruturas de dados podem ser usadas para representar listas lineares, cada uma com vantagens e desvantagens particulares. As duas representações mais utilizadas são as implementações por meio de arranjos e de apontadores.

Implementação de Listas por meio de Arranjos Os itens da lista são armazenados em posições contíguas de memória. A lista pode ser percorrida em qualquer direção. A inserção de um novo item pode ser realizada após o último item com custo constante. A inserção de um novo item no meio da lista requer um deslocamento de todos os itens localizados após o ponto de inserção. Retirar um item do início da lista requer um deslocamento de itens para preencher o espaço deixado vazio.

Estrutura da Lista Usando Arranjo Os itens são armazenados em um array de tamanho suficiente para armazenar a lista. O campo Último aponta para a posição seguinte a do último elemento da lista. O i-ésimo item da lista está armazenado na (i - 1)-ésima posição do array, 0 ≤ i < Último. A constante MaxTam define o tamanho máximo permitido para a lista.

Estrutura da Lista Usando Arranjo #include <sys/time.h> #include <stdio.h> #include <stdlib.h> #define InicioArranjo 0 #define MaxTam 999 typedef int TipoChave; typedef int Apontador; typedef struct { TipoChave Chave; /* outros componentes */ } TipoItem; TipoItem Item[MaxTam]; Apontador Primeiro, Ultimo; } TipoLista;

Operações sobre Lista Usando Arranjo void FLVazia(TipoLista *Lista) { Lista->Primeiro = InicioArranjo; Lista->Ultimo = Lista->Primeiro; } /* FLVazia */ int Vazia(TipoLista Lista) return (Lista.Ultimo == Lista.Primeiro); } /* Vazia */ void Insere(TipoItem x, TipoLista *Lista) if (Lista->Ultimo == MaxTam) printf("Lista esta cheia\n"); else { Lista->Item[Lista->Ultimo] = x; Lista->Ultimo++; } } /* Insere */

Operações sobre Lista Usando Arranjo void Retira(Apontador p, TipoLista *pLista, TipoItem *pItem) { int Aux; if (Vazia(*pLista) || p >= pLista->Ultimo) { printf(" Erro: Posicao nao existe\n"); return; } *pItem = pLista->Item[p]; pLista->Ultimo--; for (Aux = p+1; Aux <= pLista->Ultimo; Aux++) pLista->Item[Aux - 1] = pLista->Item[Aux]; } /* Retira */

Operações sobre Lista Usando Arranjo void Imprime(TipoLista Lista) { int Aux; for (Aux = Lista.Primeiro; Aux < Lista.Ultimo; Aux++) printf("%d\n", Lista.Item[Aux].Chave); } /* Imprime */

Lista Usando Arranjo Vantagens e Desvantagens Vantagem: economia de memória (os apontadores são implícitos nesta estrutura). Desvantagens: custo para inserir ou retirar itens da lista, que pode causar um deslocamento de todos os itens, no pior caso; em aplicações em que não existe previsão sobre o crescimento da lista, a utilização de arranjos em linguagens como o Pascal ou C pode ser problemática porque neste caso o tamanho máximo da lista tem de ser definido em tempo de compilação.

Exercícios Implementar funções: Localiza elemento Concatenar/intercalar (Merge) Dividir uma lista em várias Copiar uma lista Ordenar (sort) por ordem crescente/decrescente Pesquisar (search)