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

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

Listas generalizadas. SCC-202 Algoritmos e Estruturas de Dados I

SCC122 Estruturas de Dados. Listas Generalizadas e Polinômios

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

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

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

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

Lista: conceito, representação e algoritmos

SCC Algoritmos e Estruturas de Dados I

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

Listas Lineares. continuando...

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

Lista: conceito, representação e algoritmos

Árvores & Árvores Binárias

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

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

1. Listas sequenciais versus listas ligadas. Lista sequencial

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

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

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

Listas ordenadas. SCC-202 Algoritmos e Estruturas de Dados I. Prof. Thiago A. S. Pardo. Listas em que os elementos estão ordenados por algum critério

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

SCC Algoritmos e Estruturas de Dados I

Estrutura de Dados Listas

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

Métodos Computacionais. Listas Encadeadas

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

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

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

Arvores, Percursos não recursivos, Arvores heterogêneas. Aula 19

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

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

Estruturas de Dados I

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

Árvores Binárias. 16/11 Representação e Implementação: Encadeada Dinâmica O TAD

Árvores & Árvores Binárias

Módulo 10 Listas Encadeadas

Lista Encadeada (Linked List)

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

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

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Lista: conceito, representação e algoritmos

Algoritmos e Estruturas de dados

UNIVERSIDADE DA BEIRA INTERIOR

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

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

Árvores & Árvores Binárias

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

Revisão: Tipo Abstrato de Dados Recursividade

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO

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

Estrutura de Dados Polinómio

Estrutura de Dados II. Prof. Sérgio Portari

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

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

INF1007 Programação 2 9 Pilhas. (c) Dept. Informática - PUC-Rio 1

UNIVERSIDADE DA BEIRA INTERIOR

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

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

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

Listas Encadeadas. Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

Algoritmos e Estruturas de Dados II IEC013

Listas ordenadas. Listas ordenadas. Listas ordenadas. Listas ordenadas. Listas ordenadas. Listas ordenadas. Definição

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

Conceitos de Linguagens de Programação

Listas Lineares Ordenadas

Aplicações de listas e outras estruturas

Aplicações de listas Outras estruturas

Linguagens de Programação

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

Métodos Computacionais. Tipos Estruturados

Professora Jeane Melo

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

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

UNIVERSIDADE DE SÃO PAULO - ICMC Departamento de Ciências da Computação SCC-203 Algoritmos e Estruturas de Dados 2-2 Sem /2012 Profa.

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

Linguagens de Programação Conceitos e Técnicas. Amarrações

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

Estruturas de Dados Pilhas, Filas, Listas

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

Algoritmos II prof. Daniel Oliveira

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

Tipos abstratos de dados

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

AULA 14 ESTRUTURA DE DADOS

PRIMEIRA AVALIAÇÃO IDENTIFICAÇÃO. Nome: 04/05/2011

Programação científica C++

Linguagens de Programação Aula 11

Layout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs

Paradigmas de Linguagem de Programação. Paradigma Imperativo

Linguagens de Programação Conceitos e Técnicas. Amarrações Prof. Tiago Alves de Oliveira

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

PIC - PROGRAMAÇÃO LINGUAGEM C. AUTOR: ENG. ANTONIO CARLOS LEMOS JÚNIOR

Listas e matrizes esparsas. SCC122 Estruturas de Dados

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

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

INF 1620 P3-02/07/02 Questão 1 Nome:

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Transcrição:

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

Lista com nó de cabeçalho Nó de cabeçalho Header, sentinela, etc. Para que? Sentinela Beth Bia Elen

Lista com nó de cabeçalho Possibilidades de uso Informação global sobre a lista que possa ser necessária na aplicação Armazenar número de elementos da lista, para que não seja necessário atravessá-la contando seus elementos 3 Beth Bia Elen Sentinela

Lista com nó de cabeçalho Possibilidades de uso Informação global sobre a lista que possa ser necessária na aplicação Em uma fábrica, guarda-se as peças que compõem cada equipamento produzido, sendo este indicado pelo nó sentinela Informações do vôo correspondente a uma fila de passageiros Carro Portas Vidros Lataria Sentinela

Lista com nó de cabeçalho Possibilidades de uso Informação global sobre a lista que possa ser necessária na aplicação Lista vazia contém somente o nó sentinela Sentinela

Lista com nó de cabeçalho Possibilidades de uso Lista circular Não existe mais NULL no fim da lista, eliminando-se o risco de acessar uma posição inválida de memória Sentinela Beth Bia Elen

Lista com nó de cabeçalho Possibilidades de uso Lista circular Uso da sentinela para simplificar Busca Sempre vai encontrar a chave: se sentinela, então chave não estava na lista. Maria Beth Bia Elen Sentinela

Lista com nó de cabeçalho Possibilidades de uso Lista circular Como saber qual é o último elemento da lista? Sentinela Beth Bia Elen

Lista com nó de cabeçalho Possibilidades de uso Lista circular Como saber qual é o último elemento da lista? Ele aponta para o nó sentinela Sentinela Beth Bia Elen

Lista com nó de cabeçalho Possibilidades de uso Lista circular Como representar a lista vazia?

Lista com nó de cabeçalho Possibilidades de uso Lista circular Como representar a lista vazia? Sentinela

Lista com nó de cabeçalho Possibilidades de uso Informações para uso da lista como pilha, fila, etc. Exemplo: em vez de um ponteiro de fim da fila, o nó sentinela pode apontar o fim O campo info do nó sentinela passa a ser um ponteiro Acaba por indicar o início da fila também Sentinela Beth Bia Elen

Lista com nó de cabeçalho Possibilidades de uso Indica um nó específico da lista Por exemplo, em buscas que são constantemente interrompidas Verificação de pessoas em ordem alfabética: poupa o esforço de se recomeçar ou a necessidade de ter uma variável auxiliar Sentinela Beth Bia Elen

Lista com nó de cabeçalho Possibilidades de uso Nó sentinela com ponteiro em seu campo info Vantagem: acesso possivelmente mais direto e imediato Desvantagens? Quais? Sentinela Beth Bia Elen

Lista com nó de cabeçalho Possibilidades de uso Nó sentinela com ponteiro em seu campo info Vantagem: acesso possivelmente mais direto e imediato Desvantagens? Quais? Registro sentinela tem tipo distinto dos demais Sentinela Beth Bia Elen

Lista não homogênea Lista genérica Possibilidade de usar uma mesma estrutura para armazenar informações diferentes Inteiro, caracter, estrutura, etc. Não é necessário definir blocos de memória diferentes

Lista não homogênea Como inserir uma vaca, um guarda-chuva e um trem em uma mesma pilha? Topo

Lista não homogênea Solução 1 Definem-se vários campos de informação Usam-se somente os necessários struct no { char info1; int info2; struct no *prox; } Desvantagem: memória alocada desnecessariamente

Lista não homogênea Solução 2 Definem-se vários ponteiros Aloca-se memória conforme necessidade struct no { } char *info1; int *info2; struct no *prox; Desvantagem: memória (dos ponteiros não usados) alocada desnecessariamente

Lista não homogênea Solução 3 Usa-se um registro/estrutura variante struct no { union { int ival; float fval; char cval; } elemento; int tipo; struct no *prox; } struct no *p; p->tipo = 1; /*inteiro*/ p->elemento.ival = 256; p->tipo = 3; /*char*/ p->elemento.cval = n ;

Lista generalizada Uma lista generalizada é aquela que pode ter como elemento ou um átomo ou uma outra lista (sub-lista) Átomo: integer, real, char, string, etc. Cabeça e cauda Cabeça: primeiro elemento da lista (átomo ou lista) Cauda: o resto (uma outra lista, mesmo que vazia)

Lista generalizada Definição formal Uma lista generalizada A é uma seqüência finita de n 0 elementos 1, 1,... n, em que i são átomos ou listas. Os elementos i, com 0 i n, que não são átomos são chamados sub listas de A. Estrutura básica do bloco de memória Tipo do dado Átomo(s) ou ponteiro para sub-lista ou Tipo do dado Cabeça prox Cauda

Lista generalizada Suponha que uma lista seja representada por elementos entre parênteses (no estilo da linguagem de programação LISP) ou entre colchetes (no estilo de PROLOG) (a,b,c) ou [a,b,c] (a,(b,c)) ou [a,[b,c]] (a,(b),(c)) ou [a,[b],[c]] (a,b,()) ou [a,b,[]] Tipo=0 indica átomo e tipo=1 indica sub-lista

Lista generalizada Exemplos de representação L1 = (a,(b,c)) L1 0 a 1 0 b 0 c L2 = (a,b,c) L2 0 a 0 b 0 c

Lista generalizada Exemplos de representação L1 = (a,(b,c)) L1 0 a 1 0 b 0 c L2 = (a,b,c) L2 0 a 0 b 0 c Cabeça(L2)? Cauda(L2)? Cabeça(Cauda(L2))? Cabeça(L1)? Cauda(L1)? Cabeça(Cauda(L1))?

Lista generalizada Exercício: faça a representação da lista L3 ((a,b),(c,(d,e)),f,())

Lista generalizada Exercício: faça a representação da lista L3 ((a,b),(c,(d,e)),f,()) L3 1 1 0 f 1 0 a 0 b 0 c 1 0 d 0 e

Lista generalizada Listas Recursivas L4 = (a,l4) L4 0 a Listas Compartilhadas L5 = (L4,L4,()) L5 1 1 1

Lista generalizada Declaração em C Union

Lista generalizada Declaração em C Union typedef struct bloco { union { char atomo; struct bloco *sublista; } info; int tipo; struct bloco *prox; } no;

Lista generalizada Exercícios Implementar uma função recursiva para buscar um átomo x numa lista generalizada (1) considere apenas a lista principal; (2) considere que x pode estar em qualquer sublista. Implementar uma sub-rotina para verificar se duas listas generalizadas são iguais Tente fazer a sub-rotina recursiva

Algoritmos Uma função booleana recursiva para buscar um átomo x numa lista generalizada, L. Retorna também o endereço, se estiver lá. (1) considere apenas a lista principal; Função Busca (x, L): Se L é vazia então retorna FALSE Senão L = (l1, l2,...ln) e se l1 é atomo então se l1 = x então retorna TRUE e x retorna Busca (x, (l2, l3,...ln))

Função não-recursiva int esta_na_lista_principal(no *p, elem x) { int achou=0; while ((p!=null) && (!achou)) { if ((p->tipo==0) && (p->info.atomo==x)) achou=1; else p=p->prox; } return(achou); }

Algoritmos Uma função booleana recursiva para buscar um átomo x numa lista generalizada, L. Retorna também o endereço, se estiver lá. (2) considere que x pode estar em qualquer sublista. Função Busca (x, L): Se L é vazia então retorna FALSE Senão L = (l1, l2,...ln) e se l1 é atomo então se l1 = x então retorna TRUE e x senão retorna Busca (x, (l2, l3,...ln)) senão se Busca (x, l1) retorna TRUE e x senão retorna Busca (x, (l2, l3,...ln))

int esta_em_qualquer_parte_da_lista(no *p, elem x) { if (p==null) return 0; else if (p->tipo==0) { if (p->info.atomo==x) return 1; else return(esta_em_qualquer_parte_da_lista(p->prox,x)); } else if (p->tipo==1) { if (esta_em_qualquer_parte_da_lista(p->info.sublista,x)) return 1; else return(esta_em_qualquer_parte_da_lista(p->prox,x)); } }

Algoritmos Verificar se duas listas generalizadas, L1 e L2, são iguais Tente fazer função booleana recursiva Função Igual (K, L): Se K e L são vazias então retorna TRUE; Se K ou L é vazia então retorna FALSE; /*ambas são não vazias: (k1,...kn) (l1,...lm)*/ Se k1 e l1 são átomos e são iguais Então retorna Igual((k2,...kn), (l2,...lm)) Senão se k1 e l1 são sublistas então se Igual(k1, l1) então retorna Igual((k2,...kn), (l2,...lm)) senão retorna FALSE

int iguais(no *L1, no *L2) { } if ((L1==NULL) && (L2==NULL)) return 1; else if ((L1==NULL) (L2==NULL)) return 0; else if ((L1->tipo==L2->tipo==0) && (L1->info.atomo==L2- >info.atomo)) return(iguais(l1->prox,l2->prox)); else if ((L1->tipo==L2->tipo==1) && (iguais(l1->info.sublista,l2- >info.sublista))) return(iguais(l1->prox,l2->prox)); else return 0;

Listas e recursão Exercício extra Implementar uma sub-rotina que determina a profundidade máxima de uma lista generalizada Tente usar recursividade Por exemplo, para o caso abaixo, a sub-rotina deveria retornar profundidade 3 L 1 1 0 f 0 a 0 b 0 c 1 0 d 0 e

Profundidade máxima de uma lista generalizada S Função Profundidade ( S ): Se S é atomo ou S = lista vazia então retorna 0 senão{prof_atual = 0; para cada elemento elem de S: {prof := Profundidade(elem); se prof > prof_atual então prof_atual:= prof }; retorna prof_atual + 1; } Ex. S = (a, (b)) => Prof(S) = 2 A = (a, b, c) => Prof(A) = 1 B = () => Prof(B) = 0;

int profundidade(no *p) { int prof, aux; if (p==null) prof=0; else if (p->tipo==0) { prof=1; aux=profundidade(p->prox); if (aux>prof) prof=aux; } else if (p->tipo==1) { prof=1+profundidade(p->info.sublista); aux=profundidade(p->prox); if (aux>prof) prof=aux; } return(prof); }

Lista generalizada Exercício Implementar uma sub-rotina para verificar se duas listas generalizadas são estruturalmente iguais O conteúdo em si não importa

int iguais_estruturalmente(no *L1, no *L2) { if ((L1==NULL) && (L2==NULL)) return 1; else if ((L1==NULL) (L2==NULL)) return 0; else if (L1->tipo==L2->tipo==0) return(iguais_estruturalmente(l1->prox,l2->prox)); else if ((L1->tipo==L2->tipo==1) && (iguais_estruturalmente(l1-> info.sublista,l2->info.sublista))) return(iguais_estruturalmente(l1->prox,l2->prox)); else return 0; }

Lista generalizada e polinômios Considere os polinômios: P1 = 4x²y³z + 3xy + 5 P2 = x 10 y³z² + 2x 8 y²z² + x 4 y 4 z + 6x³y 4 z + 2yz P3 = 3x²y (a) n de termos: variável P1=3, P2=5, P3=1 (b) n de variáveis: variável P1=P2=3, P3=2 (c) nem todo termo é expresso com todas as variáveis

Lista generalizada e polinômios Objetivos - representar de forma a otimizar o uso de memória - representação única para todo polinômio Solução: lista generalizada

Uso de lista generalizada para representação de polinômios Opção 1 2 tipos de registros Ex: (1) P(x,y,z) = 4x²y³z+3xy + 5 P Lvar coef lig Lvar coef lig Lvar coef lig 4 3 5 Nvar exp lig z 1 Nvar exp lig y 3 Nvar exp lig x 2 Nvar exp lig y 1 Nvar exp lig x 1 Conseqüência: registros de tamanhos fixos; listas de tamanhos variáveis; possibilidade de representar qualquer polinômio em qualquer n de variáveis, qualquer grau

Uso de lista generalizada para representação de polinômios Opção 2 1 tipo de registro Ex: P1 = 4x²y³z + 3xy + 5 P1 var val prox var val prox var val prox 4 3 5 var val prox var val prox x 2 x 1 var val prox y 3 var val prox z 1 var val prox y 1 Conseqüência: registros de tamanhos fixos; listas de tamanhos variáveis; possibilidade de representar qualquer polinômio com qualquer n de variáveis e qualquer grau

Exercício Faça a declaração dos tipos das 2 opções anteriores Implementar uma função que: (a) receba um polinômio representado via lista generalizada e os valores das variáveis (b) percorra a lista generalizada e compute o resultado do polinômio (c) retorne o resultado para quem chamou a sub-rotina