Escolar Documentos
Profissional Documentos
Cultura Documentos
25/11/2011 1
OBJETIVO DA AULA DE HOJE
25/11/2011 2
Lista Encadeada
• Na aula anterior vimos a TAD pilha e Fila
utilizando arranjo.
A B C D
Listas Encadeadas e
4
Deques
Aplicações de Listas Encadeadas
• Implementação de diversos TADs:
– Pilhas, Filas, Deques, Vetores, Listas, Seqüências
– Árvores, Grafos
• Vantagens
– A memória alocada é O(n) onde n é o número de
objetos no TAD
Listas Encadeadas e
5
Deques
Lista Simplesmente Encadeada
• Uma lista simplesmente encadeada e genérica pode
ser implementada por duas classes:
Listas Encadeadas e
6
Deques
Classe Node em uma LSE
Listas Encadeadas e
7
Deques
Classe LSE
public class LSE {
private Node head; // essencial
private Node tail; // dispensável
:
}
head tail
A B C D
Listas Encadeadas e
8
Deques
LSE: Inserção no início
• Tempo: O(1) head tail
head tail
Listas Encadeadas e
9
Deques
LSE: Deleção no início
• Tempo: O(1) head tail
head = head.getNext();
head tail
head tail
Listas Encadeadas e
10
Deques
LSE: Inserção no fim
• Tempo: O(1) head tail
head tail
Listas Encadeadas e
11
Deques
LSE: Deleção no fim
• Tempo: O(n) head tail
v = head;
while (v.getNext() != tail)
v = v.getNext(); head v tail
tail = v;
tail.setNext(null);
head tail
Listas Encadeadas e
12
Deques
Implementação de Pilha com LSE
public interface Stack<T> {
public int size();
public boolean isEmpty();
public T top() throws StackEmptyException;
public void push(T element);
public T pop() throws StackEmptyException;
}
Listas Encadeadas e
13
Deques
Classe Pilha com LSE
top
class LinkedStack<T> implements Stack<T> {
private Node<T> top;
private int size;
public LinkedStack() { top = null; size = 0; }
public int size() { return size; }
public boolean isEmpty() {
if (top == null) return true;
return false; }
public T top() throws StackEmptyException {
if (isEmpty()) throw new StackEmptyException("stack is empty");
return top.getElement(); }
Listas Encadeadas e
14
Deques
Classe Pilha com LSE
top2 top1
public void push(T element) {
Node<T> v = new Node<T>();
v.setElement(element);
v.setNext(top);
top = v; size++; }
public T pop() throws StackEmptyException {
if (isEmpty()) throw new StackEmptyException("stack is empty");
T temp = top.getElement();
top = top.getNext(); top1 top2
size--; return temp; }
}
Listas Encadeadas e
15
Deques
Implementação de Fila com LSE
public interface Queue<T> {
public int size();
public boolean isEmpty();
public T front() throws QueueEmptyException;
public void enqueue(T element);
public T dequeue() throws QueueEmptyException;
}
Listas Encadeadas e
16
Deques
Classe Fila com LSE
head tail
class LinkedQueue<T> implements Queue<T> {
private Node<T> head;
private Node<T> tail;
private int size;
public LinkedQueue() { head = tail = null; size = 0; }
public int size() { return size; }
public boolean isEmpty() {
if (head == null) return true;
return false; }
public T front() throws QueueEmptyException {
if (isEmpty()) throw new QueueEmptyException("queue is empty");
return head.getElement(); }
Listas Encadeadas e
17
Deques
Classe Fila com LSE
head tail1 tail2
public void enqueue(T element) {
Node<T> v = new Node<T>();
v.setElement(element); v.setNext(null);
if (size()==0) head = v; else tail.setNext(v);
tail = v; size++; }
public T dequeue() throws QueueEmptyException {
if (isEmpty()) throw new QueueEmptyException("queue is empty");
T temp = head.getElement();
head = head.getNext(); size--; head1 head2 tail
if (size()==0) tail = null;
return temp; }
Listas Encadeadas e
18
Deques
Exercícios
1. Implemente a interface Stack e as classes Node e
LinkedStack em Java. Utilize as classes para criar uma pilha
de inteiros e execute uma seqqência qualquer de operações
sobre a pilha.
Listas Encadeadas e
19
Deques
Referência Bibliográfica
• Estrutura de Dados e Algoritmos em Java
– Michael T. Goodrich
– Roberto Tamassia
• www.datastructures.net
Pilhas e Filas 20