vector e estruturas encadeadas - desenvolvido pela profa. luciana porcher nedel e alterado pela...

26
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 Encadeadas Profa. Isabel Harb Manssour (Material adaptado das aulas dos Profs: Luciana Nedel, Júlio Machado, Marcelo Cohen e Bernardo Copstein)

Upload: internet

Post on 17-Apr-2015

103 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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)

Page 2: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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

Page 3: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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

Page 4: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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

Page 5: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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.

Page 6: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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

Page 7: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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()

Page 8: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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

Page 9: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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()); }}

Page 10: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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

Page 11: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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

Page 12: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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

Page 13: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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.

Page 14: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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

...

Page 15: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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

Page 16: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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

Page 17: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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

Page 18: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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

Page 19: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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) {.........}}

Page 20: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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; }}

Page 21: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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);

}

Page 22: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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; }}

Page 23: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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)

Page 24: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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)

Page 25: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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

Page 26: Vector e Estruturas Encadeadas - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Estruturas de dados Vector

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