Prof. Mateus Raeder Professor.unisinos.br/mraeder

Slides:



Advertisements
Apresentações semelhantes
TIPOS ABSTRATOS DE DADOS
Advertisements

ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Estruturas de Dados Marcio Gonçalves.
Curso: Banco de Dados I Análise de Sistemas PUC Campinas
TADS – Tipos Abstratos de Dados
Prof. João Bosco M. Sobral
INE 5384 Estruturas de Dados Prof a. Patrícia Vilain
Algoritmos e Estruturas de Dados I
Abstract Factory Intenção: fornecer uma interface comum para a criação de famílias de objetos relacionados ou dependentes, sem especificar suas classes.
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Walfredo Cirne walfredo.dsc.ufpb.br
Linguagem C LPG-I – Variáveis Estruturadas – Vetores
Árvores e Árvores Binárias
1 Arquitetura CORBA Repositório de Implementação Repositório de Interface cliente programa cliente proxy ORB Core ou invocação dinâmica servidor ORB Core.
Professor: Rogério Lopes Disciplina: Engenharia de Software II Fortium Sistemas da Informação Engenharia de Software II.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Tópico Avançados em Sistemas de Computação (Pesquisa Operacional)
Aula 8 Orientação à Objetos
Noções de Estrutura de Dados Logica de Programação
Robson Godoi / Sandra Siebra
Copyright Marcos L. Chaim 2005 Princípios de Projeto de Software Orientado a Objetos Segundo Semestre 2005 Marcos L. Chaim ACH Turma 02 EACH – USP.
Curso de extensão em Desenvolvimento Web
Tipo Abstrato de Dados: Lista não ordenada
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Listas Simplesmente Encadeadas
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Tipos Agregados Homogêneos e Listas
Programação Orientada a Objetos com Java
Aula prática 13 Orientação a Objetos – C++ Parte 1
Listas lineares Denise Guliato Faculdade de Computação – UFU
Desenvolvimento de Sistemas Orientados a Aspectos
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Aula 02 – BCC202 Tipo Abstrato de Dados Túlio Toffolo www. decom. ufop
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
INE 5384 Estruturas de Dados Prof a. Patrícia Vilain
ALGORITMOS Intensivo Janeiro e Fevereiro de 2011
Listas Simplesmente Encadeadas
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Paradigmas da Programação – Semestre 1 – Aula 9 Professor: Eduardo Mantovani )
Laboratório II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Linguagem de Programação JAVA Técnico em Informática Professora Michelle Nery.
Algoritmos e estrutura de dados Prof. Luiz Gonzaga da Silveira Jr
Diagrama de Componentes
Programação I Aula 1 Prof. Gilberto Irajá Müller Última atualização 2/3/2009.
Linguagem de Programação JAVA
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Laboratório I Mateus Raeder. Mateus Raeder – março de 2010 Apresentação da disciplina  Professor: Mateus Raeder  Contato:  Página.
Paradigmas de Programação –Aula 7 Lab 2 Professores: Eduardo Mantovani Fábio Paula Santos.
Paradigmas da Programação – Semestre 1 – Aula 8 Professor: Eduardo Mantovani )
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
JAVA – Fila ATAI.
Analise de Algoritmos e Notação Assintótica
Estrutura de Dados II Alocação Dinâmica. Alocação de memória Ao ser executado, um programa carrega seu código executável para a memória; Uma parte da.
Redes de Computadores I Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Sistemas de Arquivos- Cap4
 A linguagem Java tem diversas classes para a manipulação dos conjuntos de dados. Esses dados podem ser organizados de duas maneiras diferentes: ◦ Vetores.
Estruturas de Dados Murilo Salgado Razoli.
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
Sistemas de Arquivos. Alocação em memória – Problemas Quantidade Limitada de Informações Perda de informações quando o processo é terminado Vários processos.
INTRODUÇÃO THOBER CORADI DETOFENO, MSC. Aula 01 JOINVILLE 2015 Universidade do Estado de Santa Catarina – CCT/UDESC.
Tipos Compostos Heterogêneos e Tipos Abstratos de Dados
Rede de Computadores (REC)
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Estrutura de Dados Prof. André Cypriano M. Costa
Estrutura de Dados Prof. André Cypriano M. Costa
1 Especificação de Sistemas de Software e a UML. 2 Modelagem de sistema A modelagem de sistema auxilia o analista a entender a funcionalidade do sistema.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
A evolução do conceito de movimento e suas causas.
Reabilitação Estrutural de Edifícios
Frederico Rocha Um olhar sobre os esforços tecnológicos dos fornecedores do setor de petróleo e gás Frederico Rocha
Transcrição da apresentação:

Prof. Mateus Raeder Professor.unisinos.br/mraeder mraeder@unisinos.br Listas Lineares Prof. Mateus Raeder Professor.unisinos.br/mraeder mraeder@unisinos.br

Tipo Abstrato de Dados (TAD) Um Tipo Abstrato De Dados (TAD) é a especificação matemática de um conjunto de dados e das operações que podem ser executadas sobre esses dados. TAD define o que cada operação faz, mas não como faz. Em Java, um TAD pode ser expresso por uma interface. (Goodrich, 2007)

Estrutura de Dados (ED) = materialização do TAD Para implementar um TAD, numa linguagem de programação, é necessário encontrar uma forma de representá-los nessa linguagem utilizando tipos e operações suportadas pelo computador. Estrutura de Dados (ED) = materialização do TAD Em Java, ED é modelado por uma classe. Dados em TAD: representado por variáveis na classe Operações em TAD: representados por método na classe. Assim, um mesmo tipo abstrato de dados pode ser concretizado (ou implementado) de diversas formas. TADs são materializados pela estruturas de dados. Lista Encadeada (implementação com referências) Lista com alocação estática (implementação usando array) (Goodrich, 2007)

Prof. Mateus Raeder - Programação II Listas Lineares A Lista Linear é a estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem existente entre eles. Uma lista linear, ou tabela, é um conjunto de n>= 0 nós L[1], L[2], ..., L[n] , onde: Se n>0, L[1] é o primeiro nó, Para 1 < k <= n, o nó L[k] é precedido por L[k-1]. Seqüência Linear de dados (SZWARCFITER, 1994) Prof. Mateus Raeder - Programação II

Estrutura interna é abstraída Estrutura dos nós Estrutura interna é abstraída nó INFORMAÇÕES Número RG Nome Nasc. Cargo d a b c d z chave: elemento identificador do nó na lista campo do nó Prof. Mateus Raeder - Programação II

Exemplos de aplicações com listas notas de alunos cadastro de funcionários de uma empresa itens em estoque em uma empresa dias da semana vagões de um trem letras de uma palavra pessoas esperando ônibus cartas de baralho precipitações pluviométricas em um mês / dia Prof. Mateus Raeder - Programação II

Listas: Tipo de Armazenamento O tipo de armazenamento de uma lista linear pode ser classificado de acordo com a posição relativa (sempre contígua ou não) na memória de dois nós consecutivos na lista. Lista linear com alocação estática de memória Também chamada de Lista Seqüencial Nós em posições contíguas de memória Geralmente representado por arrays Útil para implementar filas e pilhas (variáveis para controlar fim e início) Lista linear com alocação dinâmica de memória Também chamada de Lista Encadeada Posições de memória são alocadas a medida que são necessárias Nós encontram-se aleatoriamente dispostos na memória e são interligados por ponteiros, que indicam a próxima posição da tabela Nós precisam de um campo a mais: campo que indica o endereço do próximo nó. (SZWARCFITER, 1994) Prof. Mateus Raeder - Programação II

Listas Lineares: Classificação Listas Lineares Gerais SEM restrição para inserção e remoção de elementos Listas Lineares Listas Particulares (Pilhas, Filas, Deques) COM restrição para inserção e remoção de elementos (SZWARCFITER, 1994) Prof. Mateus Raeder - Programação II

Listas Lineares Gerais a inclusão e remoção de elementos pode ser realizada em qualquer posição da lista. Essas listas não apresentam nenhuma restrição de acesso. podendo sofrer inserções ou retiradas em qualquer lugar, inclusive no meio da lista. Ex: lista de chamada dos alunos. As listas gerais podem ser ordenadas ou não ordenadas. Lista Ordenada: os nós encontram-se ordenados segundo os valores de suas chaves Lista Não Ordenada: os nós não estão ordenados (SZWARCFITER, 1994) Prof. Mateus Raeder - Programação II

Casos particulares de listas Deque: inserções e remoções são permitidas apenas nas extremidades da lista; Pilha: Inserções e remoções são realizadas em apenas um extremo; Fila: inserções realizadas em um extremo e remoções em outro. 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 (SZWARCFITER, 1994) Prof. Mateus Raeder - Programação II

Operações sobre listas lineares gerais Verificar se lista está cheia Verificar se lista está vazia Inserção de um nó na i-ésima posição Inserção de nó no final da lista Exclusão do i-ésimo nó Acesso ao i-ésimo nó Exibir conteúdo dos nós da lista Alteração do i-ésimo nó Localizar nó através da chave Combinação de duas ou mais listas Classificação da lista Cópia da lista Prof. Mateus Raeder - Programação II

Listas Lineares Gerais com Alocação Estática ou Listas Seqüênciais

Lista linear geral com alocação estática Também chamada de Lista Seqüencial Suponhamos uma lista geral de números inteiros L que, em certo momento, possui os seguintes 7 elementos: 5 -4 8 0 -1 6 2 Declarando um vetor de inteiros de nome L[0..Max-1], disporemos a lista nas primeiras posições do vetor, de modo que o primeiro nó da lista ocupe a posição 0 do vetor, e indicaremos seu término por uma variável inteira de nome size que indica a posição do último elemento. Teremos size Prof. Mateus Raeder - Programação II

Exercício: Lista com alocação estática Inserir 3 no fim da lista: Retirar 8: Retirar o 1º elemento: Inserir 7 no início da lista: 5 -4 8 0 -1 6 2 3 size 5 -4 0 -1 6 2 3 size -4 0 -1 6 2 3 size 7 -4 0 -1 6 2 3 size 14

Operações implementadas sobre listas lineares gerais public interface IndexListObject { /** Returns the number of elements in this list. */ public int size(); /** Returns whether the list is empty. */ public boolean isEmpty(); /** Inserts an element e to be at index i, shifting all elements after this. */ public void add (int i, Object e) throws IndexOutOfBoundsException; /** Returns the element at index i, without removing it. */ public Object get (int i) /** Removes and returns the element at index i, shifting the elements after this. */ public Object remove (int i) /** Replaces the element at index i with e, returning the previous element at i. */ public Object set (int i, Object e) } (Goodrich, 2007)

Listas Seqüenciais (Goodrich, 2007) public class ArrayIndexListObject implements IndexListObject { private Object[] A; // array storing the elements of the indexed list private int capacity = 16; // initial length of array A private int size = 0; // number of elements stored in the indexed list /** Creates the indexed list with initial capacity 16. */ public ArrayIndexListObject() { A = new Object[capacity]; } /** Returns the number of elements in the indexed list. */ public int size() { return size; /** Returns whether the indexed list is empty. */ public boolean isEmpty() { return size() == 0; (Goodrich, 2007)

Lista geral com alocação estática /** Returns the element stored at the given index. */ public Object get(int r) throws IndexOutOfBoundsException { checkIndex(r, size()); return A[r]; } /** Replaces the element stored at the given index. */ public Object set(int r, Object e) throws IndexOutOfBoundsException { Object temp = A[r]; A[r] = e; return temp; Prof. Mateus Raeder - Programação II

CS 307 Fundamentals of Computer Science Inserção V 1 2 r size V size 1 2 r V o size 1 2 r CS 307 Fundamentals of Computer Science

Lista geral com alocação estática /** Inserts an element at the given index. */ public void add(int r, Object e) throws IndexOutOfBoundsException { checkIndex(r, size() + 1); if (size == capacity) {// an overflow capacity *= 2; Object[] B = new Object[capacity]; for (int i=0; i<size; i++) B[i] = A[i]; A = B; } for (int i=size-1; i>=r; i--)// shift elements up A[i+1] = A[i]; A[r] = e; size++; Prof. Mateus Raeder - Programação II

CS 307 Fundamentals of Computer Science Remoção V 1 2 size o r V 1 2 size r V 1 2 size r CS 307 Fundamentals of Computer Science

Lista geral com alocação estática /** Removes the element stored at the given index. */ public Object remove(int r) throws IndexOutOfBoundsException { checkIndex(r, size()); Object temp = A[r]; for (int i=r; i<size-1; i++)// shift elements down A[i] = A[i+1]; size--; return temp; } Prof. Mateus Raeder - Programação II

Lista geral com alocação estática /** Checks whether the given index is in the range [0, n - 1] */ protected void checkIndex(int r, int n) // throws IndexOutOfBoundsException {// if (r < 0 || r >= n) throw new IndexOutOfBoundsException("Illegal index: " + r); } Prof. Mateus Raeder - Programação II

Exercícios Exercício 1. Crie a classe Aluno, representando um aluno que conterá um nome (String) e uma nota (double). Adicione métodos de acesso e modificação para os atributos da classe. Sobrescreva nesta classe o método toString da classe Object. No método main de uma classe qualquer, crie uma lista linear geral (implementação dada em aula). Crie vários objetos alunos e o insira na lista. Exercício 2. Na classe ArrayIndexListObject, sobrescreva nesta classe o método toString da classe Object.

Estouro das Listas Estouro de listas: Estouro negativo (underflow): lista vazia sofre operação de extração Estouro positivo (overflow): quando a inserção de um elemento excede a capacidade total da lista.

Lista geral com alocação estática /** Inserts an element at the given index. */ public void add(int r, Object e) throws IndexOutOfBoundsException { checkIndex(r, size() + 1); if (size == capacity) {// an overflow capacity *= 2; Object[] B = new Object[capacity]; for (int i=0; i<size; i++) B[i] = A[i]; A = B; } for (int i=size-1; i>=r; i--)// shift elements up A[i+1] = A[i]; A[r] = e; size++; Prof. Mateus Raeder - Programação II

Listas Lineares Gerais e Genéricas Obs: Antes de continuar com esse conteúdo, ensinar tipos genéricos Prof. Mateus Raeder - Programação II

Lista Linear Geral: Interface public interface IndexList<E> { /** Returns the number of elements in this list. */ public int size(); /** Returns whether the list is empty. */ public boolean isEmpty(); /** Inserts an element e to be at index i, shifting all elements after this. */ public void add(int i, E e) throws IndexOutOfBoundsException; /** Returns the element at index i, without removing it. */ public E get(int i) /** Removes and returns the element at index i, shifting the elements after this. */ public E remove(int i) /** Replaces the element at index i with e, returning the previous element at i. */ public E set(int i, E e) } (Goodrich, 2007) Prof. Mateus Raeder - Programação II

Lista Linear Geral com Tipos Genéricos (1) public class ArrayIndexList<E> implements IndexList<E> { private E[] A; // array storing the elements of the indexed list private int capacity = 16; // initial length of array A private int size = 0; // number of elements stored in the indexed list /** Creates the indexed list with initial capacity 16. */ public ArrayIndexList() { A = (E[]) new Object[capacity]; } /** Returns the number of elements in the indexed list. */ public int size() { return size; /** Returns whether the indexed list is empty. */ public boolean isEmpty() { return size() == 0; (Goodrich, 2007) Prof. Mateus Raeder - Programação II

Lista Linear Geral com Tipos Genéricos (2) /** Returns the element stored at the given index. */ public E get(int r) throws IndexOutOfBoundsException { checkIndex(r, size()); return A[r]; } /** Replaces the element stored at the given index. */ public E set(int r, E e) E temp = A[r]; A[r] = e; return temp; Prof. Mateus Raeder - Programação II

Lista Linear Geral com Tipos Genéricos (3) /** Inserts an element at the given index. */ public void add(int r, E e) throws IndexOutOfBoundsException { checkIndex(r, size() + 1); if (size == capacity) {// an overflow capacity *= 2; E[] B =(E[]) new Object[capacity]; for (int i=0; i<size; i++) B[i] = A[i]; A = B; } for (int i=size-1; i>=r; i--)// shift elements up A[i+1] = A[i]; A[r] = e; size++; Prof. Mateus Raeder - Programação II

Lista Linear Geral com Tipos Genéricos (4) /** Removes the element stored at the given index. */ public E remove(int r) throws IndexOutOfBoundsException { checkIndex(r, size()); E temp = A[r]; for (int i=r; i<size-1; i++)// shift elements down A[i] = A[i+1]; size--; return temp; } /** Checks whether the given index is in the range [0, n - 1] */ protected void checkIndex(int r, int n) // throws IndexOutOfBoundsException {// if (r < 0 || r >= n) throw new IndexOutOfBoundsException("Illegal index: " + r); Prof. Mateus Raeder - Programação II

Exercícios Exercício 3. Repetir exercício 1, mas usando a classe ArrayIndexList com tipos genéricos.

Referências Bibliográficas GOODRICH, MICHAEL T. ; TAMASSIA, ROBERTO. Estruturas de dados e algoritmos em Java. 4.ed. Bookman. 2007. SZWARCFITER, JAYME LUIZ / MARKENZON, LILIAN Estruturas De Dados E Seus Algoritmos. Ed. LTC, 1994. Prof. Mateus Raeder - Programação II