2002/2003 Programação Orientada para Objectos 1 Aula 2 Noção de lista e de iterador Operações com listas e iteradores Classes embutidas.

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Celso C. Ribeiro Caroline T. Rocha
O TAD fila O TAD fila armazena objetos arbitrários
Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 3 – Introdução às classes Capitulo 3 Introdução às classes.
Listas Encadeadas CONTEÚDO (1) Motivação (2) Definição (3) Operações
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Estruturas de Dados Árvores Binárias
Listas duplamente encadeadas
Programação II Estruturas de Dados
List templates Vamos considerar a lista ligada (singly linked list) O objecto da classe slink O objecto da classe slink O objecto da classe slink NULL.
TAD Deque ATAI.
TADS – Tipos Abstratos de Dados
Padrão de Projeto Iterator
Orientação a Objetos: Encapsulamento e Classificação
Java: Pacotes e Modificadores de Visibilidade
INE 5384 Estruturas de Dados Prof a. Patrícia Vilain
David Menotti Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Sobrecarga de Operadores
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
AED – Algoritmos e Estruturas de Dados
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Documentando con Javadoc
Lista Encadeada Circular Lista Duplamente Encadeada
1 Aula 5 Instâncias dinâmicas. 2003/2004 Programação Orientada para Objectos 2 Instâncias… int j = 20; int f() { int const i = 10; // … } Constante automática.
Aula 11 Tipos Abstractos de Dados II. 2003/2004 Introdução à Programação 2 Estrutura global do programa #include using namespace std; int mdc(int const.
1 Aula 3 Listas e iteradores (cont.). 2003/2004 Programação Orientada para Objectos 2 ListaDeInt : interface class ListaDeInt { public: typedef int Item;
Aula 8 Polimorfismo.
Programação Baseada em Objectos Desenho de TAD
1 Aula 7 Herança. 2003/2004 Programação Orientada para Objectos 2 Conceitos fundamentais: Herança Polimorfismo Ligação dinâmica.
1 Aula 6 Classes que reservam recursos externos. 2003/2004 Programação Orientada para Objectos 2 PilhaDeInt : interface /** Representa pilhas de int.
Aula 13 Tipos Abstractos de Dados IV. 2003/2004 Introdução à Programação 2 Estrutura global do programa (I) Construtores Inspectores.
Aula 12 Biblioteca padrão do C++ O que é? Composição
Aula 9 Fases do desenvolvimento de software UML Diagramas de classes
Fases do desenvolvimento de software UML
2002/2003 Programação Orientada para Objectos 1 Aula 4 Memória, unidade básica de memória e conceito de endereço Ponteiros Relação de ponteiros com matrizes.
2002/2003 Programação Orientada para Objectos 1 Aula 3 Utilização de listas Melhorando a implementação das listas e iteradores Reflexão sobre interfaces.
Aula 2 Listas e iteradores.
Listas Encadeadas.
Listas Simplesmente Encadeadas
ALGORITMOS E ESTRUTURAS DE DADOS
Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
Classes Revisando: –Forma de implementação de estruturas específicas –Atributos (grupos de dados) –Métodos (conjuntos de procedimentos)
Algoritmos e Estruturas de Dados II
Pesquisa em Memória Primária
INTELIGÊNCIA ARTIFICIAL
Tipos Abstratos de Dados
Principais operações em Listas TPA Listas Simples Inserção no Final 1.void insereNofinalDaLista(Lista *l, Elemento e){ 2.Lista paux,p; 3. p.
TAD Pilha com Alocação Dinâmica de Memória
Lista Encadeada Circular Lista Duplamente Encadeada
Tipos Abstratos de Dados
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
INE 5384 Estruturas de Dados Prof a. Patrícia Vilain
Listas de Prioridades Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade A prioridade associada a um dado pode ser qualquer.
Estruturas de Dados Aula 9: Listas (parte 1)
1.
Orientação a Objetos e Java Graduação em Ciência da Computação
Lista encadeada Representar um grupo de dados.
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Árvore Binária de Busca
Listas Simplesmente Encadeadas
2002/2003 Programação Orientada para Objectos 1 Aula 6 Classes que reservam recursos externos Problemas comuns Construtores e destrutores Construção por.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
Implementação Orientada a Objetos – Aula 07 Agregação e composição de objetos Prof. Danielle Martin Universidade de Mogi das Cruzes
Transcrição da apresentação:

2002/2003 Programação Orientada para Objectos 1 Aula 2 Noção de lista e de iterador Operações com listas e iteradores Classes embutidas

2002/2003 Programação Orientada para Objectos 2 O que é uma lista? (I) Exemplo: Estudar POO Comprar prenda para o dia do pai Fazer trabalho de SO Combinar ida ao concerto do Mark Knopfler

2002/2003 Programação Orientada para Objectos 3 O que é uma lista? (II) Sequência de itens em que a ordem é relevante, mas não é dada pelos elementos em si: é determinada por uma entidade exterior à lista que insere os itens pela ordem que entende

2002/2003 Programação Orientada para Objectos 4 Operações com listas Construir Pôr item na frente Pôr item na traseira Tirar item da frente Tirar item de trás Saber item da frente Saber item de trás Saber comprimento Saber se está vazia Saber se está cheia (caso exista limite) Esvaziar

2002/2003 Programação Orientada para Objectos 5 Iterador Ferramenta para percorrer e referenciar itens em listas Operações: Construir Saber item referenciado Passar ao próximo item Recuar para o item anterior Comparar iteradores (igualdade e diferença)

2002/2003 Programação Orientada para Objectos 6 Operações: listas e iteradores Obter primeiro iterador Obter último iterador Inserir item antes do item referenciado pelo iterador Remover item referenciado pelo iterador Obter iterador para o início Obter iterador para o fim

2002/2003 Programação Orientada para Objectos 7 Interface das listas class ListaDeInt { public: typedef int Item; class Iterador; ListaDeInt(); Item const& frente() const; Item const& trás() const; int comprimento() const; bool estáVazia() const; bool estáCheia() const; void põeNaFrente(Item const& item); void põeAtrás(Item const& item); void tiraDaFrente(); void tiraDeTrás(); void insereAntes(Iterador& iterador, Item const& item); void remove(Iterador& iterador); void esvazia(); Iterador primeiro(); Iterador último(); Iterador início(); Iterador fim();

2002/2003 Programação Orientada para Objectos 8 Interface dos iteradores class ListaDeInt::Iterador { public: explicit Iterador(ListaDeInt& lista_associada); Item& item() const; bool operator==(Iterador const& outro_iterador) const; bool operator!=(Iterador const& outro_iterador) const; Iterador& operator++(); Iterador& operator--(); Iterador operator++(int); Iterador operator--(int);

2002/2003 Programação Orientada para Objectos 9 Implementação das listas class ListaDeInt { … private: static int const número_máximo_de_itens = 100; Item itens[número_máximo_de_itens]; int número_de_itens; bool cumpreInvariante() const; friend class Iterador; };

2002/2003 Programação Orientada para Objectos 10 Implementação dos iteradores class ListaDeInt::Iterador { … private: ListaDeInt& lista_associada; int índice_do_item_referenciado; bool cumpreInvariante() const; friend class ListaDeInt; };

2002/2003 Programação Orientada para Objectos 11 ListaDeInt (I) inline ListaDeInt::ListaDeInt() : número_de_itens(0) { assert(cumpreInvariante()); } inline int ListaDeInt::comprimento() const { assert(cumpreInvariante()); return número_de_itens; } inline bool ListaDeInt::estáVazia() const { assert(cumpreInvariante()); return comprimento() == 0; }

2002/2003 Programação Orientada para Objectos 12 ListaDeInt (II) void ListaDeInt::põeNaFrente(Item const& item) { assert(cumpreInvariante()); assert(not estáCheia()); for(int i = comprimento(); i != 0; --i) itens[i] = itens[i – 1]; itens[0] = item; ++número_de_itens; assert(cumpreInvariante()); } inline void ListaDeInt::tiraDeTrás() { assert(cumpreInvariante()); assert(not estáVazia()); --número_de_itens; assert(cumpreInvariante()); }

2002/2003 Programação Orientada para Objectos 13 ListaDeInt (III) void ListaDeInt::insereAntes(Iterador& iterador, Item const& item) { assert(cumpreInvariante()); assert(not estáCheia()); assert(iterador != início()); for(int i = comprimento(); i != iterador.índice_do_item_referenciado; --i) itens[i] = itens[i – 1]; itens[iterador.índice_do_item_referenciado] = item; ++iterador.índice_do_item_referenciado; assert(iterador.cumpreInvariante()); ++número_de_itens; assert(cumpreInvariante()); }

2002/2003 Programação Orientada para Objectos 14 ListaDeInt (IV) inline ListaDeInt::Iterador ListaDeInt::primeiro() { assert(cumpreInvariante()); Iterador iterador(*this); assert(cumpreInvariante()); return iterador; } Ou simplesmente: inline ListaDeInt::Iterador ListaDeInt::primeiro() { assert(cumpreInvariante()); return Iterador(*this); }

2002/2003 Programação Orientada para Objectos 15 ListaDeInt (V) inline ListaDeInt::Iterador ListaDeInt::último() { assert(cumpreInvariante()); Iterador iterador(*this); iterador.índice_do_item_referenciado = comprimento() – 1; assert(iterador.cumpreInvariante()); assert(cumpreInvariante()); return iterador; }

2002/2003 Programação Orientada para Objectos 16 ListaDeInt::Iterador (I) inline ListaDeInt::Iterador::Iterador(ListaDeInt& lista) : lista_associada(lista), índice_do_item_referenciado(0) { assert(cumpreInvariante()); } inline ListaDeInt::Iterador& ListaDeInt::Iterador::operator--() { assert(cumpreInvariante()); assert(*this != lista_associada.início()); --índice_do_item_referenciado; assert(cumpreInvariante()); return *this; }

2002/2003 Programação Orientada para Objectos 17 ListaDeInt::Iterador (II) inline bool ListaDeInt::Iterador::operator==(Iterador const& outro) const { assert(cumpreInvariante() and outro.cumpreInvariante()); // assert(iteradores associados à mesma lista…); return índice_do_item_referenciado == outro.índice_do_item_referenciado; } ListaDeInt::Item& ListaDeInt::Iterador::item() { assert(cumpreInvariante()); assert(*this != lista_associada.início() and *this != lista_associada.fim()); return lista_associada.itens[índice_do_item_referenciado]; }