Vector e Estruturas Encadeadas Profa - ppt carregar
PublicouEmily Martins Alterado mais de 4 anos atrás
Apresentação em tema: "Vector e Estruturas Encadeadas Profa"— Transcrição da apresentação:
1 Vector e Estruturas Encadeadas Profa
Vector e Estruturas Encadeadas Profa. Isabel Harb Manssour (Material adaptado das aulas dos Profs: Luciana Nedel, Júlio Machado, Marcelo Cohen e Bernardo Copstein) Estruturas de dados Vector Estruturas encadeadas Classes que se auto-referenciam Alocação dinâmica de memória Pilhas Filas Árvores
2 Estruturas de dados Estruturas estáticas Estruturas dinâmicas
tamanho fixo arrays Estruturas dinâmicas aumentam e diminuem em tempo de execução listas encadeadas pilhas filas árvores
3 Vector Arrays Classe Vector Tamanho fixo
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
4 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
5 Vector Classe Vector Utiliza-se o pacote java.util.Vector
import java.util.Vector; Vectors armazenam referências a objetos Para armazenas tipos primitivos, deve-se utilizar os wrappers Float, Integer, Long, etc.
6 Vector Métodos Construtores addElement( elemento )
Vector() - capacidade inicial padrão é 10 elementos Vector(capacidade inicial) - capacidade é duplicada quando há overflow Vector(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
7 Vector Mé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()
8 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
9 Vector import 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); vetor.insertElementAt(i3,0); if (vetor.contains(i3)) System.out.println("i3 foi incluido no vetor!"); vetor.removeAllElements(); }
10 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
11 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
12 Classes que se auto-referenciam
Dois objetos de mesma classe, ligados 10 15 Dado e referência (link)
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.
14 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 ...
15 Operações em listas encadeadas
insertAtFront 7 11 firstNode 12 new ListNode 7 11 firstNode 12 new ListNode 7 11 firstNode 12 new ListNode
16 Operações em listas encadeadas
insertAtBack 12 7 11 firstNode lastNode 5 new ListNode 12 7 11 firstNode lastNode 5 new ListNode 12 7 11 firstNode lastNode 5 new ListNode
17 Operações em listas encadeadas
removeFromFront 12 7 11 firstNode lastNode 5 removeItem 12 7 11 firstNode lastNode 5 removeItem 12 7 11 firstNode lastNode 5
18 Operações em listas encadeadas
removeFromBack lastNode current removeItem 12 7 11 firstNode 5
19 Implementação de uma lista de números inteiros
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) public class Nodo{ private int val; Nodo prox; public Nodo(int n) { val = n; prox = null; } public int getVal() return(val);
20 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;
21 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);
22 Remoção de nodos da lista
public 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;
23 Pilhas Estrutura do tipo Last-In, First-Out (LIFO)
Referência ao nodo no topo da pilha São listas restritas Nodos inseridos e removidos do início Métodos push (inserir) e pop (remover)
24 Filas Estrutura do tipo First-In, First-Out (FIFO)
Mantém referência ao nodo no início e no fim da fila Métodos colocar na fila (insert) retirar da fila (remove)
25 Árvores Estruturas encadeadas não-lineares Árvores binárias
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
26 Exercícios 1) Acrescente novos métodos a classe "Lista":
a) show( ) - mostra lista b) addOrdem( ) - permite a inserção ordenada de um nodo c) ordena( ) - ordena a lista d) tamanho( ) - retorna o número de elementos da lista e) compress( ) - elimina da lista os valores repetidos. Exemplo: depois da compressão: