Академический Документы
Профессиональный Документы
Культура Документы
Listas
Listas
O conceito de lista usado no quotidiano (e.g., lista de tarefas, lista de compras, lista telefnica).
12/02/16
O TDA Lista
Operaes com listas
Inserir novo elemento na lista (no incio, no fim ou em qualquer outra posio) Remover elemento da lista (do incio, do fim ou de qualquer outra posio) Substituir elemento por outro
O TDA Lista
Mostrar elemento que est numa determinada posio Mostrar a posio de um determinado elemento Verificar se determinado elemento est na lista Verificar se a lista est vazia
12/02/16
12/02/16
Utilizao da Lista
Considere a organizao de uma maratona. Pretende-se anotar a chegada dos concorrentes pela respectiva ordem.
Cada concorrente tem uma camisola com um nmero (inteiro) que o distingue dos outros concorrentes.
Corrida
public class Corrida {
public static void main(String[] args){ ListInterface<Integer> aMinhaLista; // Usa mtodos de ListInterface aMinhaLista=new AList(); arrivalList(aMinhaLista); displayList(aMinhaLista);
12/02/16
Corrida
public static void arrivalList(ListInterface<Integer> aList){ aList.addEnd(16); aList.addEnd(4); aList.addEnd(33); aList.addEnd(27);
} //end arrivalList
10
Corrida
public static void displayList(ListInterface<Integer> aList){ int numberOfEntries= aList.size(); System.out.println(A lista contm+ numberOfEntries+concorrentes nas seguintes posies:); for (int pos=1;pos<=numberOfEntries; pos++) System.out.println(aList.get(pos)+ na posio +pos); } //end displayList
12/02/16
12
Utilizadores da mquinas de vendas S podem executar as aces disponveis no exterior da mquina Tm que saber executar essas aces Sem acesso ao interior No preciso conhecer o funcionamento interno
Utilizadores do TDA lista S podem executar operaes do TDA Lista Tm que conhecer as especificaes Acesso aos dados apenas atravs de operaes definidas no TDA Lista pode ser usada mesmo sem acesso directo aos dados
Se o interior da mquina for melhorado e Se a implementao for melhorada, o o exterior permancer inalterado, o cliente programador usa a lista do mesmo utiliza a mquina como sempre o fez modo.
12/02/16
Sala de aula
14
12/02/16
15
Sala de aula
Com menos de 40 alunos a sala tem lugares vazios Com mais de 40 alunos no h lugar para todos os alunos
16
Sala de aula
Suponhamos que os alunos esto sentados por ordem alfabtica do nome.
Sai um aluno
Para manter a ordenao pode ser necessrio deslocar alguns alunos.
12/02/16
17
A classe Vlist
Nome da classe: VList Atributos theList _________ length ____________ Operaes isEmpty addBegin addEnd get removeBegin removeEnd indexOf add size remove contains ...
18
A classe Vlist
Nome da classe: VList
Atributos
Atributos
Atributos
Atributos
theList: 8 2 4 6 length: 4
Operaes
max_size___________ Operaes isEmpty isEmpty addBegin addEnd addBegin addEnd Operaes add get size add get size isEmpty removeBegin remove removeBegin remove addBegin removeEnd contains removeEnd contains addEnd add indexOf ... indexOf ... get size removeBegin remove removeEnd contains
Operaes
isEmpty addBegin addEnd add get size removeBegin remove removeEnd contains indexOf
...
Lista do Manuel
12/02/16
19
20
10
12/02/16
21
Mtodo addEnd
Insere novo elemento no fim da lista Incrementa o atributo length public void addEnd(E item){ theList[length]=item; length++; }
22
Mtodo isEmpty
public boolean isEmpty(){ return length==0; } //end isEmpty
11
12/02/16
23
Mtodo size
public int size() { return length; } //end size
24
Mtodo addBegin
public void addBegin(E item){ for (int i=length;i>0;i--) theList[i]=theList[i-1]; theList[0]=item; length++; } //end addBegin
12
12/02/16
25
Mtodo Add
Pode ser preciso deslocar elementos da lista para a direita.
26
Mtodo add
public void add(E item, int position){ if (isEmpty() || position==1) addBegin(item); //se lista est vazia //ou posio 1, insere no incio else { if (position<=length){ for (int i=0;i<position;i++) theList[length-i]=theList[length-i-1]; theList[length-position+1]=item; length++; } else //posio ltima addEnd(item); } } //end add
13
12/02/16
27
Mtodo get
public E get(int n){ return theList[n-1]; } // end get
28
Mtodo contains
...
14
12/02/16
29
Mtodo removeEnd
public void removeEnd(){ length--; }// end removeEnd
30
Mtodo removeEnd
public void removeBegin(){ for (int i=0;i<length;i++) theList[i]=theList[i+1] length--; } //end removeBegin
15
12/02/16
31
Mtodo Remove
q Pode ser preciso deslocar elementos, excepto se for para retirar o primeiro elemento.
32
Mtodo remove
...
16
12/02/16
33
Validao/Verificao
Implementaes dos mtodos anteriores podem ser melhoradas com validao completa dos argumentos.
Como cada vector tem dimenso fixa, importante antes de inserir um elemento, verificar se o vector est cheio. public boolean isFull(){ return length==MAX_SIZE; }//end isFull
34
17
12/02/16
35
Mtodo (de acesso privado) grow para aumentar o espao de memria reservado.
private void grow(){ E[] aux=(E[])new Object[length()+1+MAX_SIZE]; for (int i=0;i<length();i++) aux[i]=theList[i]; theList=aux; }//end grow
36
public static void main(String[] args){ ListInterface<Integer> aMinhaLista=new Vlist<Integer>(); arrivalList(aMinhaLista); displayList(aMinhaLista);
18
12/02/16
37
public static void arrivalList(ListInterface<Integer> aList) { aList.addEnd(16); aList.addEnd(4); aList.addEnd(33); aList.addEnd(27); } //end arrivalList public static void displayList(ListInterface<Integer> aList) { int numberOfEntries=aList.length(); System.out.println(A lista contm+numberOfEntries+ concorrentes nas seguintes posies:); for (int position=1;position<=numberOfEntries; position++) System.out.println(aList.get(position)+ na posio +position); } //end displayList }// end Corrida
38
Acesso direto aos elementos da lista Acrescentar elemento no incio da lista simples Acrescentar/retirar elementos requer operao de deslocamento de elementos do vetor. Aumento da capacidade do vetor requer a cpia de todos os elementos.
19
12/02/16
40
Sala de aula
Consideremos uma sala de aula, onde
cada lugar (mesa/cadeira) criado medida que cada aluno chega
cada lugar tem uma identificao que o distingue dos restantes lugares cada lugar tambm tem uma referncia para o lugar que se segue O professor indica ao aluno que chega o 1 lugar da sequncia
20
12/02/16
41
Sequncia de lugares
q Na sala de aula existe uma sequncia (cadeia) de lugares
42
21
12/02/16
43
44
22
12/02/16
45
46
23
12/02/16
47
48
24
12/02/16
49
50
25
12/02/16
51
52
26
12/02/16
53
Remoo do lugar 12
54
Remoo do lugar 12
27
12/02/16
55
56
A classe N
Novo tipo de dados (classe) Cada objeto da classe N (lugar da sala) armazena duas informaes: valor (ou objeto) de determinado tipo referncia nula ou referncia para outro objeto da classe n.
28
12/02/16
57
A classe N
(a) Dois ns de tipo primitivo ligados (b) Dois ns de tipo por referncia ligados
58
A classe N
class Node<E> { private E data; // elemento da lista // ligao ao n seguinte private Node<E> next; public Node (E o) { data=o; next=null; } // end constructor public Node (E o, Node<E> n) { data=o; next=n; } // end constructor
29
12/02/16
59
A classe N
public E getData () { return data; } public Node<E> getNext () { return next; } public void setData (E o) { data=o; } public void setNext (Node<E> n) { next=n; } } // end Node
60
30
12/02/16
61
62
//ou length==0
31
12/02/16
63
64
public void add(E o, int pos){ if (pos<=1) addBegin(o); else if (pos>=length) addEnd(o); else { Node<E> aux=theHead; for (int i=1;i<pos-1;i++) aux=aux.getNext(); aux.setNext(new Node(d,aux.getNext())); length++; } } public void removeBegin(){ theHead=theHead.getNext(); length--; }
32
12/02/16
65
66
33
12/02/16
67
public boolean contains(E o){ for (Node<E> aux=theHead;aux!=null;aux=aux.getNext()) if (aux.getData()==o) return true; return false; }// end contains
} // end DList
68
34
12/02/16
69
O Programa Corrida
public class Corrida{
public static void main(String[] args){ ListInterface<Integer> aMinhaLista=new Dlist<Integer>(); arrivalList(aMinhaLista); displayList(aMinhaLista); ...
70
35
12/02/16
71
72
36
12/02/16
73
Bibliotecas Java
Package java.util
Interface List<E> Classe ArrayList<E> Classe LinkedList<E> (listas com representao dinmica)
74
37
12/02/16
75
A classe ArrayList<E>
Package java.util
Implementa a interface Java List<E> e guarda os objetos num vetor (com expanso dinmica)
76
A classe LinkedList<E>
Package java.util Implementa a interface Java List<E> com lista duplamente ligada Mtodos adicionais addFirst() addLast() removeFirst() removeLast() getFirst() getLast() ...
38