Listas Lineares. continuando...

Documentos relacionados
Estrutura de Dados Listas

Lista Encadeada (Linked List)

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

INF1007: Programação 2 8 Listas Encadeadas. (c) Dept. Informática - PUC-Rio 1

Introdução a Programação. Listas Encadeadas

Programação II. Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio

BCC202 - Estrutura de Dados I

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

ESTRUTURA DE DADOS E ALGORITMOS. Árvores Binárias de Busca. Cristina Boeres

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Estruturas de Dados Aula 12: Outras Implementações de Listas 18/04/2011

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

Estruturas de Dados I

Módulo 10 Listas Encadeadas

L I C R P * * V O * * A * A F * * * * *

Instituto de C. Linguagem C: Listas. Luis Martí Instituto de Computação Universidade Federal Fluminense -

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA

1. Listas sequenciais versus listas ligadas. Lista sequencial

Árvores Binárias de Busca (ABB) 18/11

Listas Lineares. Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.1

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Lista com descritor (continuação)

BCC202 - Estrutura de Dados I

Árvores Binárias de Busca (ABB) 18/11

Algoritmos e Estrutura de Dados. Aula 05 Estrutura de Dados: Listas (Parte II) Prof. Tiago A. E. Ferreira

ÁRVORE B. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

LISTAS LINEARES. Estrutura de Dados

Árvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura

Listas - Outras. Listas Circulares Nós Cabeça Listas Duplamente Ligadas/Encadeadas Aplicações

Árvores Binária de Busca. Prof. César Melo DCC/ICE/UFAM

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

Fila e Deque. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas

Estrutura de Dados: Lista Linear. Parte I Introdução e Listas Sequenciais Estáticas

INF 1620 P2-01/11/03 Questão 1 Nome:

Árvore Binária de Busca. Prof. César Melo

Filas. Prof. Túlio Toffolo BCC202 Aula 12 Algoritmos e Estruturas de Dados I

Estruturas de Dados Estruturas de Dados Fundamentais

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

Árvores Binárias de Busca

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Estruturas de Dados Aula 10: Listas (parte 2) 19/04/2011

ÁRVORE BINÁRIA DE BUSCA

Listas Ligadas (Encadeadas) Listas Simplesmente Encadeadas

Aula 10 Alocação Dinâmica de Memória Listas Encadeadas. prof Leticia Winkler

UNIVERSIDADE DA BEIRA INTERIOR

Tabelas Hash. informação, a partir do conhecimento de sua chave. Hashing é uma maneira de organizar dados que:

Árvores. ! utilizada em muitas aplicações. ! modela uma hierarquia entre elementos. ! O conceito de árvores está diretamente ligado à recursão

Métodos Computacionais. Variações de Listas Encadeadas

Árvores & Árvores Binárias

Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas. SCC-502 Algoritmos e Estruturas de Dados I

LINGUAGEM C: ALOCAÇÃO DINÂMICA

Estrutura de Dados. Ricardo José Cabeça de Souza Parte 9

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Pilhas Acesso. Pilha. Fila. Listas lineares especiais. Pilhas e Filas. Listas lineares especiais mais usuais. Disciplina restrita

S U M Á R I O. Definição de Estrutura de Dados. Vetores. Listas Ligadas. Pilhas. Filas

SCC Algoritmos e Estruturas de Dados I

SCC 202 Algoritmos e Estruturas de Dados I. Listas Lineares Encadeadas Alocação dinâmica

Algoritmos e Estruturas de dados

Carlos Eduardo Batista. Centro de Informática - UFPB

Tabelas Hash O Que é uma Tabela Hash? O Que é uma Tabela Hash? O Que é uma Tabela Hash? Inserindo um Novo Registro. O Que é uma Tabela Hash?

Listas Lineares Ordenadas

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 23/06/2010

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich

Transcrição:

Listas Lineares continuando... 1

Listas! relembrando: listas lineares agrupa informações referentes aum conjunto de elementos que, de alguma forma, se relacionam entre si! Uma lista linear ou está vazia, ou possui uma série de elementos (a 1,a 2,..., a n )! onde a i é um componente de algum conjunto S. 2

Listas Encadeadas 3

Tipo de Dados Recursivo! Um tipo T recursivo, possui componentes que pertencem ao tipo! definem agregados de crescimento arbitrário! objetos do tipo recursivo podem ser implementados pelo uso de ponteiros! um componente é representado por um elemento contendo um ponteiro para o objeto struct { int a; no* proximo } no; 4

Listas Encadeadas! podem crescer e diminuir dinamicamente! tamanho máximo não precisa ser conhecido a priori! Provêem flexibilidade permitindo que os ítens sejam rearrumados eficientemente! perda no tempo de acesso a qualquer item arbitrário da lista 5

Listas Encadeadas! É um conjunto de itens organizados, como um array (lista sequencial)! em um array a organização é implícita (pela posição)! em uma lista encadeada a sequência de elementos é especificada explícitamente, onde cada elemento contém um ponteiro para o próximo da lista. A L I S T 6

Listas Encadeadas! No exemplo:! um elemento é identificado por uma letra! cada elemento é representado por círculo! Cada link é representado por uma seta! Detalhes que devem ser considerados:! todo elemento possui um ponteiro! o ponteiro do último elemento tem que especificar algum tipo ( NULL de próximo (aponta para si próprio ou! um ponteiro ou um elemento para o 1º da lista. head A L I S T 7

Listas Encadeadas! algumas operações são mais eficientes do que em lista sequencial! mover um elemento com a identificação T do fim da lista para o começo! Mesmo que a lista seja muito longa, a mudança estrutural é realizada através de 3 operações head A L I S T 8

Listas Encadeadas! Para inserção de um novo elemento X:! aloca-se memória para um elemento e atualiza-se os ponteiros! em lista sequencial seria necessário deslocar todos os elementos a partir do ponto de inserção;! apenas 2 links são alterados para esta operação - não importa quão longa é a lista head X A L I S T 9

Listas Encadeadas! remoção de um elemento:! basta alterar o ponteiro do elemento anterior ao removido head A L I S T X! o conteúdo de X (no exemplo) ainda existe, mas não é mais acessível pela lista 10

Listas Encadeadas! Lista Encadeada x Sequencial! remoção e inserção são mais naturais na lista encadeada! outras operações já não são tão naturais! Encontrar o k-ésimo elemento da lista! em uma lista sequencial - simplesmente acessar a[k]! na lista encadeada é necessário percorrer k links.! Achar um ítem antes de um dado ítem 11

Listas Encadeadas Simplesmente encadeada - ponteiros em uma direção Duplamente encadeada - ponteiros para duas direções! um ponteiro para o próximo e um para o anterior 12

Listas Encadeadas! Exemplo: Suponha uma lista simplesmente encadeada! Cada nó consiste de: 1 palavavra com 1 floating point e outra com o ponteiro para o próximo nó! o fim da lista é marcado com um ponteiro com NULL! É desejável descobrir se algum nó possui um número igual a 1.0! Deve retornar Verdade se encontrar e Falso em caso contrário 13

Listas Encadeadas typedef struct { float valor; tipo_nó * proximo } tipo_nó; tipo_nó * head; tipo_nó * prox; () Acha_1 { prox = head; resultado = false; } while ( (prox!= NULL) && (! resultado)){ } ( 1.0 == (prox->valor if else resultado = true; prox = prox->proximo; return(resultado); 14

Listas Encadeadas! Inserção e Remoção! alocação dinâmica de memória! malloc e free do C! Exemplo de uso:! Rotina que toma conta do espaço livre de memória! lista de memória livre! Ao liberar memória - inserção na lista! Ao alocar memória - remoção da lista 15

Listas Encadeadas - Inserção! seja uma lista em que cada elemento armazena um inteiro! inserir sempre no início Estrutura usada struct { int info; tipo_no * proximo } tipo_no; tipo_no * head; head = NULL; Protótipo da Função ( valor Insere(int head 16

Listas Encadeadas - Inserção ( valor Insere(int { tipo_no * novo; novo = malloc (sizeof(tipo_no)); if (!novo) return(false); novo->info = valor; novo->prox = head->prox; head->prox = novo; return(true); } 17

Listas Encadeadas - Remoção! remover o 1º elemento, retornando o valor armazenado! Se remover de uma lista vazia? head 18

Listas Encadeadas - Remoção () remove { valor = INEXISTENTE; if (head!= NULL){ valor = head->valor; pt = head; head = head ->prox; free (pt); }else lista vazia ; return (valor); } 19

Busca Listas Encadeadas! Busca valor em uma lista encadeada onde os elementos não seguem uma ordenação! retorna o elemento que contém o valor procurado, ou NULL, caso não encontre head 20

Busca Listas Encadeadas ( pt busca_encadeada (valor, ant, { pt = head; ant = head; while (pt!= NULL) && ( pt->info!= valor){ ant = pt; pt = pt->prox; } } head 21

Busca Listas Encadeadas! caso o valor esteja na lista! pt aponta para o elemento que contém o valor! senão estiver na lista! pt aponta para NULL, pois o campo proximo do último elemento aponta para NULL head 22

Listas Encadeadas - Inserção! Problema: inserir um valor em uma lista encadeada não ordenada, caso não exista! como não existe ordenação, pode-se inserir no início da lista 23

Listas Encadeadas - Inserção Insere(valor){ } pt =busca_encadeada (valor, ant, pt ); if (pt == NULL){ novo = malloc (); } novo->info = valor; novo->prox = head; head = novo; 24

Listas Encadeadas - Remoção! Problema: remover o elemento que armazenar um dado valor em uma lista encadeada não ordenada, caso exista 25

Listas Encadeadas - Remoção ( remove_enc(valor { busca_encadeada ( valor, ant, pt); if (pt!= NULL){ ant->prox = pt->prox; if (ant == pt) head = pt->prox; free (pt); }else não encontrado ; } 26

Busca em uma lista ordenada ( pt busca_enc_ord (valor, ant, { ant = head; pt = head; while ((pt!= NULL) && (pt->info < valor)){ ant = pt; pt = pt->prox; } } 27

Pensar! Fazer um programa que:! Le números inteiros positivos a) Calcular média destes números b) Calcular mínimo e máximo destes números c) Listar os N maiores! Sejam x e y dois polinômios. Calcule a soma de x e y e armazene em z 28

Listas Encadeadas Exercício! Fazer rotinas para inserção, remoção, e localizar o n-ésimo elemento! Fazer rotina para localizar o elemento antes daquele de valor 5, considerando uma lista desordenada! Qual a melhor representação: simplesmente ou duplamente encadeada? 29