Lista: conceito, representação e algoritmos

Documentos relacionados
22/08/2011. Fila. SCC0202 Algoritmos e Estruturas de Dados I. Prof. Thiago A. S. Pardo. Fila. O que é? Para que serve?

Fila. SCC0502 Algoritmos e Estruturas de Dados I. Prof. Thiago A. S. Pardo

Fila. Algoritmos e Estruturas de Dados I. Baseado no material de Thiago A. S. Pardo. Debora Medeiros

Fila. Fila. Biblioteca. Biblioteca. Biblioteca. Biblioteca. O que é? Para que serve? Algoritmos e Estruturas de Dados I

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Fila. 26 e 31/8/2008 Representação/Implementação: Seqüencial estática Encadeada dinâmica Exercícios/Aplicações

SCC Algoritmos e Estruturas de Dados I

SCC Algoritmos e Estruturas de Dados I

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

Fila. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

Estruturas de Dados I

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

Fila. Algoritmos e Estruturas de Dados I

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Pilha. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

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

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

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

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Atividade de laboratório listas encadeadas simples

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

08/08/2011. Pilha. SCC0202 Algoritmos e Estruturas de Dados I. Prof. Thiago A. S. Pardo. Pilha. O que é? Para que serve?

SCC 202 Algoritmos e Estruturas de Dados I. Pilhas (Stacks) (implementação dinâmica)

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

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

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

Algoritmos e Estruturas de dados

Módulo 10 Listas Encadeadas

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

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

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

BCC202 - Estrutura de Dados I

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

Árvores. Prof. César Melo DCC/ICE/UFAM

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

Árvores & Árvores Binárias

Estruturas de Dados Aula 11: TAD Pilha

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

1/34 GESTÃO DINÂMICA DE MEMÓRIA

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

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

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

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros:

Pilhas e Filas. Nádia Félix e Hebert Coelho

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

Árvores. Prof. César Melo DCC/ICE/UFAM

12. Filas Interface do tipo fila

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

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

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

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

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

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

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

Linguagem C: Listas Encadeadas

Árvores. SCC-214 Projeto de Algoritmos. Thiago A. S. Pardo. Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral

Listas: a última das 3 estruturas lineares (Pilhas, Filas e Listas)

Alocação Dinâmica de Memória

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

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

Listas Lineares. continuando...

Transcrição:

Lista: conceito, representação e algoritmos SCC0502 Algoritmos e Estruturas de Dados I Prof. Thiago A. S. Pardo

Problema Imaginem a situação da automação de uma biblioteca Todos os livros devem ser cadastrados O sistema deve informar se um determinado livro está ou não disponível nas estantes Caso o livro não esteja disponível, o usuário poderá aguardar pela liberação do livro se cadastrando em uma fila de espera Quando o livro for devolvido e liberado, o primeiro da fila deve ser contatado para vir buscá-lo 2

Problema Estatísticas 120.000 livros 1 fila de espera para cada livro No máximo 1000 pessoas ficam esperando por livros da biblioteca No máximo 30 pessoas ficam esperando um mesmo livro 3

Problema Como representar/estruturar o problema? 4

Soluções Alternativa 1 Reservar espaço para 120.000 filas (uma para cada livro), com capacidade para 30 pessoas 120.000 vetores de 30 elementos Espaço reservado para 3.600.000 pessoas Problema? 5

Soluções Alternativa 1 Reservar espaço para 120.000 filas (uma para cada livro), com capacidade para 30 pessoas 120.000 vetores de 30 elementos Espaço reservado para 3.600.000 pessoas Problema? Muito espaço reservado não é utilizado Mesmo que a fila de um livro seja alocada dinamicamente quando aparece alguém para espera, nada garante que ela será usada por completo 6

Soluções Alternativa 2 Alocar espaço para 1000 elementos Todas as 120.000 filas compartilham o mesmo espaço Problema? 7

Soluções Alternativa 2 Alocar espaço para 1000 elementos Todas as 120.000 filas compartilham o mesmo espaço Problema? Como 120.000 filas podem compartilhar a memória reservada a elas? Como várias estruturas podem compartilhar um espaço de memória? 8

Compartilhamento de memória 9

Compartilhamento de memória 10

Compartilhamento de memória Perguntas Como saber qual é o topo de uma pilha dessas (x, y, z)? Como saber qual elemento vem logo abaixo do topo (o próximo na sequência)? 11

Compartilhamento de memória Perguntas Como saber qual é o topo de uma pilha dessas (x, y, z)? Como saber qual elemento vem logo abaixo do topo (o próximo na sequência)? Alocação encadeada! 12

Alocação sequencial vs. encadeada Alocação sequencial: elementos são alocados em sequência; sequência física 13

Alocação sequencial vs. encadeada Alocação encadeada: elementos não estão necessariamente em posições adjacentes de memória; sequência lógica ou virtual 14

Listas encadeadas Definição: uma lista encadeada L, com n blocos de memória B1,B2,...,Bn é definida pelas seguintes características: Cada bloco de memória Bi, ou cada nó da lista, tem pelo menos dois campos: Informação a ser armazenada Indicação do próximo elemento da lista Os blocos de memória não estão necessariamente em sequência física na memória O acesso aos elementos da lista ocorre por meio de um indicador do início da lista (o primeiro elemento); o acesso aos demais elementos ocorre por meio da indicação de quem é o próximo na sequência O último nó da lista indica um endereço inválido, chamado NIL ou NULL 15

Representação 16

Lista Listas: lineares ou não Exemplos de listas lineares e não lineares? Definição de lista linear Estrutura de dados que armazena elementos de forma alinhada, ou seja, um após o outro Estática vs. Dinâmica & Sequencial vs. Encadeada 17

Lista O que fizemos até agora? Listas lineares Sequencial Encadeada Estática?? Dinâmica?? Listas não lineares Sequencial Encadeada Estática?? Dinâmica?? 18

Lista O que fizemos até agora? Listas lineares Sequencial Encadeada Estática Pilha, fila? Dinâmica?? Listas não lineares Sequencial Encadeada Estática?? Dinâmica?? 19

Lista Lista encadeada e dinâmica Uma das representações mais interessantes e flexíveis que há Aplicável para diversos problemas 20

Possível declaração Como declarar um desses blocos da lista? 21

Possível declaração struct no { char info; struct no *next; } struct no *p; p=(struct no*) malloc(sizeof(struct no)); p 22

Possível declaração typedef struct no { char info; struct no *next; } No; No *p; p=(no*) malloc(sizeof(no)); p 23

Possível declaração typedef struct no { char info; struct no *next; } No; É possível tirar esse nome? No *p; p=(no*) malloc(sizeof(no)); p 24

Implementação da lista encadeada Dependendo das exigências, indicadores do início e do fim da lista podem ser necessários Acesso e manipulação dos elementos da lista 25

#include <stdio.h> struct no { char info; struct no *next; }; struct no *ini, *fim, *p; int main(void) { ini=null; fim=null; p=(struct no*) malloc(sizeof(struct no)); p->info='a'; p->next=null; ini=p; fim=p; p=(struct no*) malloc(sizeof(struct no)); p->info='b'; p->next=null; fim->next=p; fim=p; p=ini; while (p!=null) { printf("%c ",p->info); p=p->next; } p=ini; while (p!=null) { ini=ini->next; free(p); p=ini; } Exemplo Qual o resultado da execução desse programa? } system("pause"); return 0; 26

Declaração da lista Com princípios de TAD, como fazer a declaração? Considerando somente ponteiros de início e fim para a lista 27

Declaração da lista typedef char elem; typedef struct bloco { elem info; struct bloco *prox; } no; typedef struct { no *inicio, *fim; } Lista; Lista L; 28

Operações genéricas sobre lista Considerando a representação de lista anterior, implemente o TAD lista com as seguintes operações cria-lista inserir-na-lista finaliza-lista tamanho recursiva e não recursiva esta-na-lista recursiva e não recursiva imprimir 29