Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Estruturas de dados Vector Estruturas encadeadas Classes que se auto-referenciam Alocação dinâmica de memória Pilhas Filas Árvores
Vector e Estruturas Encadeadas Profa. Isabel Harb Manssour(Material adaptado das aulas dos Profs: Luciana Nedel, Júlio Machado, Marcelo Cohen e Bernardo Copstein)
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Estruturas de dados
Estruturas estáticas tamanho fixo arrays
Estruturas dinâmicas aumentam e diminuem em tempo de execução listas encadeadas pilhas filas árvores
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Vector
Arrays Tamanho fixo
Classe Vector Um vetor é uma estrutura de dados que, assim como
um arranjo, permite acesso direto a seus elementos através da especificação de sua posição
Semelhante aos arrays, mas com armazenamento dinâmico
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Vector
Classe Vector
Portanto, um vetor não tem tamanho fixo.Capacidade: é o espaço reservado
• Pode armazenar até a capacidade especificada previamente• Se passar do limite, duplica a capacidade automaticamente (ou
aumenta de acordo com um incremento pré-determinado)
Tamanho: é o total de elementos no vetor
Tamanho <= capacidade
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Vector
Classe Vector
Utiliza-se o pacote java.util.Vectorimport java.util.Vector;
Vectors armazenam referências a objetosPara armazenas tipos primitivos, deve-se utilizar os wrappersFloat, Integer, Long, etc.
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
VectorMétodos
ConstrutoresVector() - capacidade inicial padrão é 10 elementosVector(capacidade inicial) - capacidade é duplicada quando há
overflowVector(cap. inicial, incremento) - incremento é o quanto a
capacidade é aumentada quando houver um overflow
addElement( elemento )Inclui elemento no final (pode ter que aumentar a capacidade para
mais um elemento) insertElementAt( elemento, posição )
Insere e desloca os elementos subsequentes
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
VectorMétodos
setElementAt( novoElemento, posição )Substitui um elemento por outro
elementAt( posição )Retorna o elemento armazenado na posição
size()Retorna o número de componentes do vetor
removeElement( elemento )Procura e remove o primeiro elemento encontrado
removeElementAt( posição ) removeAllElements()
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Vector
Métodos firstElement(), lastElement() isEmpty()
Testa se o vetor não tem componentes (retorna um boolean) contains( elemento )
Retorna true se encontrar o elemento no vetor capacity()
Retorna a atual capacidade do vetor indexOf( elemento )
Retorna a posição do elemento ou -1 se não achar
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Vectorimport java.util.Vector;public class TestaVector { public static void main() { Vector vetor = new Vector(1,2); //tamanho e incremento Integer i1= new Integer(20), i2= new Integer(30); Integer i3= new Integer(40); vetor.add(i1); System.out.println("Size=" + vetor.size() +
" Capacity=" + vetor.capacity()); vetor.add(i2); System.out.println("Size=" + vetor.size() +
" Capacity=" + vetor.capacity()); vetor.insertElementAt(i3,0); System.out.println("Size=" + vetor.size() +
" Capacity=" + vetor.capacity()); if (vetor.contains(i3)) System.out.println("i3 foi incluido no vetor!"); vetor.removeAllElements(); System.out.println("Size=" + vetor.size() +
" Capacity=" + vetor.capacity()); }}
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Estruturas encadeadas
Estruturas encadeadas são úteis naquelas situações em que não é possível prever o número de entradas de dados em tempo de compilação ou quando o tipo de operação que tiver de ser feita sobre essas entradas adequar-se melhor a uma estrutura encadeada do que a um vetor
Um dos tipos mais simples de estruturas encadeadas são as listas encadeadas simples
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Classes que se auto-referenciam
Contêm referência a objeto da mesma classe permitem implementar estruturas de dados encadeadas
class Node { private int data; private Node next;
public Node( int d ) { /* constructor body */ } public void setData( int d ) { /* method body */ } public int getData() { /* method body */ } public void setNext( Node nextNode ) { /* method body */ } public Node getNext() { /* method body */ }}
Atributo next corresponde ao link
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
10
15
Dado e referência (link)
Classes que se auto-referenciam
Dois objetos de mesma classe, ligados
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Alocação dinâmica de memória
Obtenção de memória em tempo de execução operador new obtenção de memória em função do tipo retorna uma referência ao objeto recém-criado
• limite = quantidade de memória física ou virtual disponível • se não há memória disponível: erro OutOfMemoryError
– Node nodeToAdd = new Node( 10 );– 10 é o valor do atributo armazenado em Node
liberação do espaço não necessário• Java tem garbage collector automática
public class OutOfMemoryError extends VirtualMachineError Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more
memory could be made available by the garbage collector.
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Listas encadeadas
Seqüência linear de nodos, que são instâncias de classe que se auto-referencia nodos conectados por links acesso direto ao primeiro e último elemento outros nodos obtidos a partir dos links
Alocação dinâmica
H D Q
firstNode lastNode
...
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
7 11
firstNode
12
new ListNode
7 11
firstNode
12
new ListNode
7 11
firstNode
12
new ListNode
Operações em listas encadeadas
insertAtFront
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
12 7 11
firstNode lastNode
5
new ListNode
12 7 11
firstNode lastNode
5
new ListNode
12 7 11
firstNode lastNode
5
new ListNode
Operações em listas encadeadas
insertAtBack
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
12 7 11
firstNode lastNode
512 7 11
firstNode lastNode
5
removeItem
12 7 11
firstNode lastNode
5
removeItem
Operações em listas encadeadas
removeFromFront
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
lastNodecurrent
removeItem
12 7 11
firstNode
5
Operações em listas encadeadas
removeFromBack
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Implementação de uma lista de números inteiros
public class Nodo{ private int val; Nodo prox;
public Nodo(int n) { val = n; prox = null; }
public int getVal() { return(val); }}
class Lista{ private Nodo prim,ult; public Lista(){ prim = null; ult = null; }
public boolean empty(){ if (prim == null) return(true); else return(false); }
public void add(int nro) {.........} public Nodo find(int n) {.........} public void del(int n) {.........}}
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Adição de nodos à lista
public void add(int nro){ Nodo n = new Nodo(nro); if (prim == null){ prim = n; ult = n; } else{ ult.prox = n; ult = ult.prox; }}
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Pesquisa de nodos na lista
public Nodo find(int n){
Nodo aux;
aux = prim;
while(aux != null){
if (aux.getVal() == n) return(aux);
aux = aux.prox;
}
return(null);
}
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Remoção de nodos da listapublic void del(int n){ Nodo ant; if (prim == null) return;
if (n == prim.getVal()){ if (ult == prim) ult = prim.prox; prim = prim.prox; return; } ant = prim; while(ant.prox != null){ if (ant.prox.getVal() == n){ if (ant.prox == ult) ult = ant; ant.prox = ant.prox.prox; } ant = ant.prox; }}
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Pilhas
Estrutura do tipo Last-In, First-Out (LIFO)Referência ao nodo no topo da pilhaSão listas restritas
Nodos inseridos e removidos do início Métodos push (inserir) e pop (remover)
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Filas
Estrutura do tipo First-In, First-Out (FIFO)Mantém referência ao nodo no início e no fim da
filaMétodos
colocar na fila (insert) retirar da fila (remove)
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Árvores
Estruturas encadeadas não-lineares nodos podem ter dois ou mais links, indicando dois ou
mais nodos filhos primeiro nodo é o nodo raiz nodos sem filhos são folhas
Árvores binárias diferentes algoritmos de caminhamento
B
A D
C
Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
Exercícios
1) Acrescente novos métodos a classe “Lista”:a) show( ) - mostra listab) addOrdem( ) - permite a inserção ordenada de um nodoc) ordena( ) - ordena a listad) tamanho( ) - retorna o número de elementos da lista
e) compress( ) - elimina da lista os valores repetidos.
Exemplo: 1 4 7 9 3 4 depois da compressão: 1 4 7 9 3