Académique Documents
Professionnel Documents
Culture Documents
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
1
Lista linear duplamente encadeada/ligada
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
2
Lista linear duplamente encadeada/ligada
previous next
lista
Alocação dinâmica
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
3
Classe DNode
public class DNode {
private String element; //Elemento do DNode é uma string
private DNode previous; //Referência para um objeto DNode
private DNode next; //Referência para um objeto DNode
//Cria um node com um elemento e duas referências
public DNode(String s, DNode p, DNode n) {
element = s;
previous = p;
next = n;
}
//Cria um node com um elemento e duas referências null
public DNode(String element) {
this(element, null, null);
}
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
4
Classe DNode
//Retorna o elemento deste node
public String getElement() {
return element;
}
//Retorna a referência para o node anterior
public DNode getPrevious() {
return previous;
}
//Retorna a referência para o próximo node
public DNode getNext() {
return next;
}
//Define o elemento deste node
public void setElement(String newElem) {
element = newElem;
}
//Define a referência para o node anterior
public void setPrevious(DNode newPrevious) {
previous = newPrevious;
}
//Define a referência para o próximo node
public void setNext(DNode newNext) {
next = newNext;
}
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
5
Lista duplamente encadeada/ligada
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
6
Operações sobre listas encadeadas
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
7
Operações sobre listas encadeadas
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
8
Antes de começarmos…
Supondo a existência da classe JDLinkedList, desenhe a lista criada
através do código abaixo (a saída do programa):
public static void main(String args[]) {
JDLinkedList lista = new JDLinkedList();
try {
lista.insertFirst(new DNode("D"));
lista.insertFirst(new DNode("A"));
lista.insertFirst(new DNode("B"));
lista.insertLast(new DNode("S"));
lista.insertLast(new DNode("C"));
lista.removeFirst(); //pode lançar UnderflowException
lista.removeLast(); //pode lançar UnderflowException
} catch (UnderflowException e) {
System.out.println("ERRO: Impossível remover!");
e.printStackTrace();
}
lista.show();
}
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
9
Lista duplamente encadeada/ligada
//demais métodos...
}
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
10
Classe UnderflowException
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
11
isEmpty(), getFirst() e getLast()
public boolean isEmpty() {
return head == null;
}
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
13
Inserção no final da lista
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
14
Remoção no início da lista
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
15
Remoção no final da lista
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
16
Mostrar/exibir elementos da lista
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
17
Inserção depois de uma posição qualquer da lista
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
18
Inserção depois de uma posição qualquer da lista
//...
if (current == head) {
while (posAtual < pos) {
current = current.getNext();
posAtual++;
}
} else {
while (posAtual > pos) {
current = current.getPrevious();
posAtual--;
}
}
n.setNext(current.getNext());
n.setPrevious(current);
current.getNext().setPrevious(n);
current.setNext(n);
size++;
}
}
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
19
Atividade
Implemente um método em Java para remover um node, depois de
uma posição especificada, em uma lista duplamente
encadeada/ligada.
/** Lista duplamente encadeada/ligada **/
public class JDLinkedList {
protected DNode head; //node cabeça da lista
protected DNode tail; //node cauda da lista
protected long size; //número de nodes da lista
// Construtor default que cria uma lista vazia
public JDLinkedList(){
head = null;
tail = null;
size = 0;
}
//métodos...
public DNode removeAfter(int pos) throws IndexOutOfBoundsException {
...
}
}
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
20
Fim!
Estruturas de Dados
Tecnologia em Análise e Desenvolvimento de Sistemas
Fatec Zona Leste
21