Buscar

Listas Estáticas-1

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Estrutura de Dados
Listas
Jorge Campos
jorge@unifacs.br
Abstração de Dados
Abstração de Dados (Data Abstraction) é um dos mais importante mecanismo de abstração. 
No processo de abstração de dados “tudo” é visto como objetos. 
Abstração de Dados permite que sejam abstraídos os detalhes de como os objetos são implementados e que toda a atenção seja dada a como os objetos se comportam e se comunicam. 
Na prática a abstração de dados é obtida através da definição de um novo tipo de dado (Tipo Abstrato de Dado).
O comportamento dos objetos é expresso em termos de um conjunto de operações com algum significado para esses objetos.
Tipo Abstrato de Dados = (objetos, operações)
Em Java, Tipos Abstrados de Dados são obtidos através de classes ou interfaces.
Forma Geral da Especificação de um TAD
Visibilidade class Nome {
// Visão Geral: uma breve descrição do comportamento do objeto
// Construtores
// Especificação dos construtores
// Requer:
// Modifica:
// Efeito:
// Métodos
// Especificação dos métodos
// Requer:
// Modifica:
// Efeito:
}
Listas
Definição
Uma lista é uma seqüência mutável de zero ou mais itens na forma A1, A2,…,An onde n é o tamanho da lista e Ai são elementos de um determinado tipo.
Propriedade Estrutural 
Para qualquer lista, à exceção da lista vazia, tem-se:
	O item Ai está na i-ésima posição da lista
	Ai precede Ai+1 (para i>1)
	Ai+1 sucede Ai (para i<n)
	O predecessor de A1 e o sucessor de An não são definidos
Tipo Abstrato de Dados = (objetos, operações)
Operações Sobre Objetos Listas 
Criar uma Lista vazia
Consultar o número de elementos na lista
Verificar se a lista está vazia 
Esvaziar a lista
Adicionar um elemento no final da lista
Remover a primeira ocorrência de um elemento na lista
Inserir um novo elemento na i-ésima posição
Remover o elemento na i-ésima posição
Buscar o i-ésimo elemento
Buscar a posição da primeira ocorrência de um elemento
Combinar duas ou mais listas em uma lista única
Dividir uma lista em duas
Fazer uma cópia da lista
Ordenar os itens da lista em ordem crescente ou decrescente
Imprimir a lista
…
*
Implementação de Listas
Posição dos elementos na mémoria
	Elementos consecutivos (lista seqüencial) 
	Elementos não consecutivos (lista encadeada)
Representações usuais
	Através de arranjos (arrays) – listas estáticas
	Através de apontadores ou ponteiros – listas dinâmicas
Restrições nas operações 
	Diferentes tipos de listas (pilhas, filas, deques, etc)
Organização dos Elementos
	Listas ordenadas ou não ordenadas
Implementação das operações
	Depende da representação e da organização dos elementos
Implementação de TADs Genéricos
A Superclasse Object em Java
A classe Object é a superclasse de todas as classes em Java.
public MinhaClasse extends Object {…}
Implícito
Alguns Métodos da Classe Object
public boolean equals(Object obj)
Indicates whether some other object is "equal to" this one.
Parameters: obj - the reference object with which to compare. 
Returns: true if this object is the same as the obj argument; false otherwise. 
The equals method implements an equivalence relation on non-null object references: 
	It is reflexive: for any non-null reference value x, x.equals(x) should return true. 
	It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true. 
	It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true. 
	It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified. 
	For any non-null reference value x, x.equals(null) should return false. 
The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values x and y, this method returns true if and only if x and y refer to the same object (x == y has the value true). 
Alguns Métodos da Classe Object
public String toString()
Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method. 
Returns:a string representation of the object.
The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of: 
getClass().getName() + '@' + Integer.toHexString(hashCode()) 
Especificação do TAD Lista
public class Lista {
// Visão Geral: seqüência mutável de zero ou mais itens na forma A0, A1,…,An-1 onde n é o 
// tamanho da lista e Ai são elementos de um determinado tipo, estruturados da seguinte forma:
// Ai precede Ai+1 (i≥0)
// Ai+1 sucede Ai (i<n-1)
// O item Ai está na i-ésima posição da lista
// O predecessor de A0 e o sucessor de An-1 não são definidos
// Construtores
public Lista()
// Efeito: Inicializa this como uma lista vazia de Objects
// Métodos
public int size()
// Efeito: retorna o número de elementos na lista
public boolean isEmpty()
// Efeito: testa se a lista está vazia
public void addElement (Object elem)
// Modifica: this
// Efeito: adiciona elem aos elementos de this na última posição
public boolean removeElement (Object elem)
// Modifica: this
// Efeito: remove a primeira ocorrência de elem dos elementos de this
*
Especificação do TAD Lista
public void removeAllElements()
// Modifica: this
// Efeito: remove todos os elementos da lista
public void insertElementAt (Object elem, int index) throws IndexOutOfBoundsException {
// Modifica: this
// Efeito: se index <0 ou index > this.size() lança uma OutOfBoundsException, caso
 // contrário adiciona elem aos elementos de this na posição index
public void removeElementAt (int index) throws IndexOutOfBoundsException {
// Modifica: this
// Efeito: se index <0 ou index > this.size() lança uma OutOfBoundsException, caso
// contrário remove o elemento na posição index de this
public Object ElementAt (int index) throws OutOfBoundsException
 // Efeito: se index <0 ou index > this.size() lança uma OutOfBoundsException, caso
 // contrário retorna o elemento na posição index na lista
public int indexOf (Object elem )
// Efeito: retorna a posição da primeira ocorrência do elemento elem na
// lista. Utiliza o método equals para determinar se são os mesmos objetos. Retorna -1, caso
// elem não esteja na lista 
public void printList ()
// Efeito: Imprime todos os elementos da lista usando o método toString()
*
Arrays em Java
Arrays
Arrays são estruturas que representam uma coleção (uni ou multidimensional) de objetos de um mesmo tipo, armazenados contiguamente na memória (sequencial).
	Declarando um variável do tipo Array (unidimensional)
Tipo de Dados[ ] UmaArray;
	Instanciando um Array com capacidade para 100 elementos:
umaArray=new Tipo de Dados[100];
Uma vez instanciada uma Array, sua capacidade não pode ser alterada!
Seus elementos podem ser alterados como qualquer outra variável e são acessados através de índices ε [0,capacidade-1]
	O1	O2	O3	...	On	null	null	null	null	null
umaArray[0]
umaArray[1]
umaArray[n]
umaArray[capaciadade-1]
Implementação do TAD Lista com Arranjos
public class Lista{
 // Representação
 private Object[] elements;	// array de objetos
 private int size;		// número de elementos na lista
 private int capacity=5;		// capacidade inicial da lista
 // Construtores
 public Lista() {
 elements=new Object[capacity];
 size=0; 
 } 
 // Métodos
 public int size() {
 return size;
 }
 public boolean isEmpty() {
 return(size==0); 
 }
MinhaLista
Object elements 
int size =0
int capacity=5
	null	null	null	null	null
capacity
*
Implementação do TAD Lista com Arranjos
public void addElement (Object elem) {
 increaseCapacityIfNecessary();
 elements[size]=elem;
 size++;
}
private void increaseCapacityIfNecessary() {
 // se não houver mais espaço no array, cria um novo array com o dobro da 
 // capacidade e repassa os elementos atualmente na lista para o novo array
 if (size==capacity) {
 Object[] newElements=new Object[capacity*2];
 for (int i=0;i<size;i++) 
 newElements[i]=elements[i];
 elements=newElements;
 capacity*=2;
 }
}
?
*
Implementação do TAD Lista com Arranjos
public void addElement (Object elem) {
 increaseCapacityIfNecessaray();
 elements[size]=elem;
 size++;
}
MinhaLista
Object elements 
int size =0
int capacity=5
MinhaLista.addElement (O1) 
	null	null	null	null	null
capacity
*
Implementação do TAD Lista com Arranjos
public void addElement (Object elem) {
 increaseCapacityIfNecessaray();
 elements[size]=elem;
 size++;
}
MinhaLista
Object elements 
int size =1
int capacity=5
MinhaLista.addElement (O2)
MinhaLista.addElement (O3)
MinhaLista.addElement (O4)
MinhaLista.addElement (O5) 
size
capacity
	O1	null	null	null	null
*
Implementação do TAD Lista com Arranjos
public void addElement (Object elem) {
 increaseCapacityIfNecessaray();
 elements[size]=elem;
 size++;
}
MinhaLista
Object elements 
int size =5
int capacity=5
MinhaLista.addElement (O6) 
capacity
size
	O1	O2	O3	O4	O5
*
Implementação do TAD Lista com Arranjos
private void increaseCapacityIfNecessaray() {
if (size==capacity) {
 Object[] newElements=new Object[capacity*2];
 for (int i=0;i,<size;i++) 
 newElements[i]=elements[i];
 elements=newElements;
 capacity*=2;
 }
}
MinhaLista
Object elements 
int size =5
int capacity=5
	null	null	null	null	null	null	null	null	null	null
	O1	O2	O3	O4	O5
	O1	O2	O3	O4	O5	null	null	null	null	null
*
Implementação do TAD Lista com Arranjos
private void increaseCapacityIfNecessaray() {
if (size==capacity) {
 Object[] newElements=new Object[capacity*2];
 for (int i=0;i,<size;i++) 
 newElements[i]=elements[i];
 elements=newElements;
 capacity*=2;
 }
}
MinhaLista
Object elements 
int size =5
int capacity=10
	null	null	null	null	null	null	null	null	null	null
	O1	O2	O3	O4	O5
	O1	O2	O3	O4	O5	null	null	null	null	null
*
Implementação do TAD Lista com Arranjos
public void addElement (Object elem) {
 increaseCapacityIfNecessaray();
 elements[size]=elem;
 size++;
}
MinhaLista
Object elements 
int size =5
int capacity=10
MinhaLista.addElement (O6) 
	O1	O2	O3	O4	O5	null	null	null	null	null
*
Implementação do TAD Lista com Arranjos
public void addElement (Object elem) {
 increaseCapacityIfNecessaray();
 elements[size]=elem;
 size++;
}
MinhaLista
Object elements 
int size =6
int capacity=10
	O1	O2	O3	O4	O5	O6	null	null	null	null
capacity
size
*
Implementação do TAD Lista com Arranjos
public void removeElement (Object elem) {
 int index=indexOf(elem);
 if (index>=0) removeElementAt(index);
}
public int indexOf (Object elem ) {
 for (int i=0;i<size;i++)
 if (elements[i].equals(elem)) 
 return i;
 return -1;
 }
?
*
Tratamento de Exceções
Exceções são eventos anormais que podem fazer um programa falhar. 
Por exemplo, quando se espera que um usuário entre com um número e este digita uma letra.
•As exceções na linguagem Java são objetos reais, instâncias de classe que herdam da classe Throwable. Um objeto da classe Throwable é criada, quando uma exceção é gerada.
•A linguagem Java permite que se tratem exceções através do try-catch-finally.
–try : neste bloco se coloca a chamada de métodos que podem lançar exceções.
–catch : Neste bloco você trata as exceções geradas.
–finally : neste bloco (opcional) coloca-se o código a ser executado indepenede de ter ocorrido ou não alguma exceção.
•Existem vários tipos de exceções na linguagem Java. Para que você possa tratá-las adequadamente é necessário descobrir quais são as exceções que podem ser geradas (levantadas) por um determinado método.
–Algumas exceções da linguagem Java
IOException			EOFException 		
FileNotFoundException		MalformedURLException 
SocketException		ArrayIndexOutOfBoundsException
*
Implementação do TAD Lista com Arranjos
public void removeElementAt (int index) throws ArrayIndexOutOfBoundsException {
 if (index<0 || index>size-1)
 throw new ArrayIndexOutOfBoundsException ("Lista.removeElementAt");
 else {
 size--;
 for (int i=index;i<size;i++) 
 elements[i]=elements[i+1];
 }
 }
?
*
Implementação do TAD Lista com Arranjos
MinhaLista
Object elements 
int size =6
int capacity=10
MinhaLista.removeElement (O3) 
index=indexOf(O3)=2 
MinhaLista
Object elements 
int size =5
int capacity=10
MinhaLista.removeElementAt (2) 
	O1	O2	O3	O4	O5	O6	null	null	null	null
	O1	O2	O4	O5	O6	O6	null	null	null	null
size
size
*
Implementação do TAD Lista com Arranjos
public void removeAllElements() {
 size=0;
}
public void insertElementAt (Object elem, int index) throws ArrayIndexOutOfBoundsException 
 if (index<0 || index>size-1) {
 throw new ArrayIndexOutOfBoundsException ("Lista.insertElementAt");
 }
 else {
 increaseCapacityIfNecessaray();
 for (int i=size;i>index;i--) 
 elements[i]=elements[i-1];
 elements[index]=elem;
 }
 size++;
 }
*
Implementação do TAD Lista com Arranjos
MinhaLista
Object elements 
int size =6
int capacity=10
MinhaLista.insertElementAt (O7,2) 
	O1	O2	O3	O4	O5	O6	null	null	null	null
	O1	O2	O3	O4	O5	O6	null	null	null	null
	O1	O2	O3	O3	O4	O5	O6	null	null	null
	O1	O2	O7	O3	O4	O5	O6	null	null	null
MinhaLista
Object elements 
int size =7
int capacity=10
size
size
O7
*
Implementação do TAD Lista com Arranjos
public void printList() {
 for (int i=0;i<size;i++) 
 System.out.println(elements[i].toString()); // pode omitir a chamada toString
 }
}
*
Exercício
Considere o seguinte problema:
Manter uma lista composta de objetos instâncias da classe Aluno.
Public Class Aluno {
	private String nome;
	private String matricula;
 public Aluno (String n,String m) {
 		nome=n;
 matricula=m;
 }
 public String toString() {
 return nome+”-”+matricula;
 }
}
*
Exemplo
public class ExemploLista {
 public static void main( String[] args) {
 Aluno a1,a2,a3;
 OrderedList ListaAlunos;
 ListaAlunos=new OrderedList();
 a1=new Aluno("Maria","000000"); 
 a2=new Aluno("Jorge","123456");
 a3=new Aluno("Jose","999999");
 ListaAlunos.addElement(a1); 
 ListaAlunos.addElement(a2); 
 ListaAlunos.addElement(a3); 
 ListaAlunos.printList();
 System.out.println("Fim");
 }
}
Resultado
Maria-000000
Jorge-123456
Jose-999999
Fim
*

Outros materiais