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



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

LISTAS LINEARES. Estrutura de Dados

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

BCC202 - Estrutura de Dados I

Fontes Bibliográficas. Listas Circulares. Função Imprime

Estruturas de Dados Aula 11: TAD Pilha

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

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

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

Universidade Estadual Paulista Júlio de Mesquita Filho UNESP

13. ALOCAÇÃO DINÂMICA DE MEMÓRIA

1. Listas sequenciais versus listas ligadas. Lista sequencial

BCC202 - Estrutura de Dados I

Listas Encadeadas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES

Pesquisa em memória primária: hashing. Algoritmos e Estruturas de Dados II

Aula 05: Listas Encadeadas. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

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

Pilhas e Filas. Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.2 e 3.3

Estrutura de Dados Listas

Universidade Federal do Ma Curso de Ciência da Computação

Listas Ligadas (Encadeadas) Listas Simplesmente Encadeadas

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

ias.php

Listas (Parte 1) Túlio Toffolo BCC202 Aula 09 Algoritmos e Estruturas de Dados I

SCC 202 Prova 1. 28/9/2010 Resolução e Comentários

Professora Jeane Melo

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

Pesquisa em Memória Primária Árvores de Busca. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Listas Lineares. continuando...

/*(Atenção: Em se tratando de uma lista estaticamente alocada, temos utilizado a estratégia de passa o tamanho máximo do vetor.)*/

Listas Duplamente Encadeadas

Lista Encadeada (Linked List)

Pesquisa em Memória Primária Hashing

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

Algoritmos e Estruturas de dados

Algoritmos e Estruturas de Dados II IEC013

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

Linguagem C: Listas Encadeadas

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

REVISÃO DE PILHAS E FILAS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Módulo 4. Listas Encadeadas. Algoritmos e Estruturas de Dados II C++ (Rone Ilídio)

Árvores & Árvores Binárias

Estruturas de Dados Básicas

Listas (Parte 2) Túlio Toffolo BCC202 Aula 10 Algoritmos e Estruturas de Dados I

Estruturas de Dados Básicas

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

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

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

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

Listas ligadas/listas encadeadas

Algoritmos e Estruturas de Dados

Estruturas de Dados Aula 11: TAD Pilha 09/05/2011

CES-11. Pilhas Definição Operações Filas. Operações Deques. Definição. Operações

Sistema Rodoviário Tabajara

Matrizes Esparsas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Algoritmos e Estruturas de Dados

SCC Algoritmos e Estruturas de Dados I

SCC122 - Estruturas de Dados. Lista Estática Seqüencial

INF P4-12/12/09 Questão 1 Nome:

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

AULA 12 ESTRUTURA DE DADOS

ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior

Árvores de Pesquisa. A árvore de pesquisa é uma estrutura de dados muito eficiente para armazenar informação.

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

Algoritmos e Estruturas de Dados: Lista Duplamente Encadeada

Tipos Abstratos de Dados. Estrutura de Dados

Estrutura de Dados II. Prof. Sérgio Portari

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Aula 11 Pilha Dinâmica. prof Leticia Winkler

Árvores & Árvores Binárias

Estruturas de Dados. Módulo 12 - Filas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Linguagem C. Ponteiros. Alex Vidigal Bastos.

PRIMEIRA AVALIAÇÃO IDENTIFICAÇÃO. Nome: 22/09/2010

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Aula 07: Filas

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

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

Instituto de C. Filas. Luis Martí Instituto de Computação Universidade Federal Fluminense -

Tabelas Hash. Prof. Túlio Toffolo BCC202 Aulas 23 e 24 Algoritmos e Estruturas de Dados I

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

Aplicações de listas e outras estruturas. SCC-502 Algoritmos e Estruturas de Dados I

Estruturas de Dados Aula 16: Árvores com Número Variável 13/06/2011

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

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

Estruturas de Dados. Parte dos slides a seguir são adaptações, extensões e recodificações em C dos originais:

2ª Lista de Exercícios

Conceitos. Pilhas e Filas. Conceitos e Implementação em linguagem C. Maria Adriana Vidigal de Lima. Março

Métodos Computacionais. Listas Encadeadas

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

Módulo 10 Listas Encadeadas

Listas: a última das 3 estruturas lineares (Pilhas, Filas e Listas)... árvores e grafos são não lineares!

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta

Aula 16: Pesquisa em Memória Primária - Árvores de Busca. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Transcrição:

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS

Listas Lineares Como visto anteriormente, as operações básicas para o nosso TAD Lista Linear são: FLVazia Vazia Retira Insere Imprime A implementação através de arrays possui a grande desvantagem de ter que prever a quantidade máxima de elementos da lista antes de sua utilização efetiva

Implementação de Listas com Ponteiros Os elementos (nós ou células) da lista são registros com um dos componentes destinado a guardar o endereço do seu sucessor x 0 x 1 x 2... x NULL n Desta forma, cada item da lista é encadeado com o seguinte através de uma variável do tipo Ponteiro Os nós da lista estão dispostos de maneira aleatória na memória (posições não obrigatoriamente contíguas) e são interligados por ponteiros: por isso é também chamada de lista não-seqüencial

A Lista Encadeada Assim, cada nó (ou célula) deve conter um item da lista e um campo extra para um apontador para o nó seguinte A alocação dinâmica de memória é a técnica utilizada: as posições de memória são alocadas (desalocadas) quando são necessárias (desnecessárias) Como visto, C faz a gerência de memória através das declarações malloc e free Existem outras implementações: simplesmente ou duplamente encadeadas e listas encadeadas circulares; com ou sem nós sentinela

Vantagens e Desvantagens Desvantagens 1. Acesso indireto aos elementos 2. Tempo variável para acessar os elementos (depende da posição do elemento) 3. Gasto de memória maior pela necessidade de um novo campo para o ponteiro Vantagens 1. A inserção e remoção de elementos podem ser feitas sem deslocar os itens seguintes da lista 2. Não há necessidade de previsão do número de elementos da lista; o espaço necessário é alocado em tempo de execução 3. Facilita o gerenciamento de várias listas (fusão, divisão,...)

Lista Simplesmente Encadeada Deve existir sempre uma indicação do primeiro nó: a partir dele a lista é percorrida (numa lista seqüencial, como seria?) Então, seria necessário um cuidado especial no tratamento do primeiro nó da lista: Testes em algoritmos de inserção e remoção para verificar se este ponteiro é ou não igual a NULL Uma pequena variação na estrutura, com a adição de um nó chamado nó-cabeça, evita alguns testes com o 1o. nó e melhora o desempenho das operações na lista O nó-cabeça não contém informações relacionadas aos dados da lista e nunca é removido

Representação Lista encadeada sem nó-cabeça Primeiro x 0 x 1... x n Lista encadeada com nó-cabeça Primeiro x 0 x 1... x n OBS: A implementação a seguir é de uma lista encadeada com nó-cabeça (ver mais informações nas referências indicadas)

Estrutura da Lista Encadeada typedef int TipoChave; typedef struct { TipoChave Chave; /* outros componentes */ } TipoItem; typedef struct { Apontador Primeiro, Ultimo; } TipoLista; typedef struct Celula_str *Apontador; typedef struct Celula_str { TipoItem Item; Apontador Prox; } Celula;

Implementação: FLVazia e Vazia void FLVazia(TipoLista *Lista) { Lista->Primeiro = malloc(sizeof *(Lista->Primeiro)); Lista->Ultimo = Lista->Primeiro; Lista->Primeiro->Prox = NULL; } int Vazia(TipoLista Lista) { return (Lista.Primeiro == Lista.Ultimo); }

Inserção em lista encadeada Primeiro Último Último x 0 x 1 Ultimo malloc(sizeof *(Lista->Ultimo->Prox)) x Lista->Ultimo->Prox=malloc(sizeof *(Lista->Ultimo->Prox)); Lista->Ultimo = Lista->Ultimo->Prox; Lista->Ultimo->Item = x; Lista->Ultimo->Prox = NULL;

Implementação: Insere void Insere(TipoItem x, TipoLista *Lista) { Lista->Ultimo->Prox = malloc(sizeof *(Lista->Ultimo->Prox)); Lista->Ultimo = Lista->Ultimo->Prox; Lista->Ultimo->Item = x; Lista->Ultimo->Prox = NULL; }

Remoção em lista encadeada Primeiro Último p Último x 0 X 1 x 2 aux aux = p->prox; *Item = aux->item; p->prox = aux->prox; if(p->prox == NULL) Lista->Último = p; free(aux); x 1

Implementação: Retira void Retira(Apontador p, TipoLista *Lista, TipoItem *Item) { /* --- Obs.: o item a ser retirado eh o seguinte ao apontado por p --- */ Apontador aux; if (Vazia(*Lista) p == NULL p->prox == NULL) { printf(" Erro: Lista vazia ou posicao nao existe\n"); return; } aux = p->prox; *Item = aux->item; p->prox = aux->prox; if (p->prox == NULL) Lista->Ultimo = p; free(aux); }

Implementação: Imprime void Imprime(TipoLista Lista) { Apontador Aux; Aux = Lista.Primeiro->Prox; while (Aux!= NULL) { printf("%d\n", Aux->Item.Chave); Aux = Aux->Prox; } }