Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
elaboradas por Charles Ornelas, Leonardo Rocha, Leonardo Mata e Nivio Ziviani
Transparncias
Listas Lineares
Uma das formas mais simples de interligar os elementos de um conjunto. Estrutura em que as operaes inserir, retirar e localizar so denidas. Podem crescer ou diminuir de tamanho durante a execuo de um programa, de acordo com a demanda. Itens podem ser acessados, inseridos ou retirados de uma lista. Duas listas podem ser concatenadas para formar uma lista nica, ou uma pode ser partida em duas ou mais listas. Adequadas quando no possvel prever a demanda por memria, permitindo a manipulao de quantidades imprevisveis de dados, de formato tambm imprevisvel. So teis em aplicaes tais como manipulao simblica, gerncia de memria, simulao e compiladores.
10
x1
...
xn
nil
11
package cap3. autoreferencia ; public class Lista { private static class Celula { Object item ; Celula prox ; } private Celula primeiro , ultimo , pos; / / Operaes public Lista ( ) { / / Cria uma Lista vazia this . primeiro = new Celula ( ) ; this .pos = this . primeiro ; this . ultimo = this . primeiro ; this . primeiro . prox = null ; }
12
13
14
15
Problema: distribuir os candidatos entre os cursos, segundo a nota nal e as opes apresentadas por candidato. Em caso de empate, os candidatos sero atendidos na ordem de inscrio para os exames.
16
17
7 8 9 10
...
...
Registro Registro nil Registro nil
18
...
...
...
Se no houver vaga, o registro colocado em uma lista de reprovados. Ao nal a estrutura acima conter a relao de candidatos aprovados em cada curso.
19
20
package cap3; import java . io . ; import cap3. autoreferencia . Lista ; / / vide programa da transparncia 11 public class Vestibular { private class Definicoes { public static final int nOpcoes = 3; public static final int nCursos = 7; } private static class Registro { short chave ; byte notaFinal ; byte opcao[ ] = new byte[ Definicoes .nOpcoes] ; public String toString ( ) { return new String ( " " + this .chave ) ; } } private static BufferedReader in = new BufferedReader(new InputStreamReader(System. in ) ) ;
21
22
23
O exemplo mostra a importncia de utilizar tipos abstratos de dados para escrever programas, em vez de utilizar detalhes particulares de implementao. Altera-se a implementao rapidamente. No necessrio procurar as referncias diretas s estruturas de dados por todo o cdigo. Este aspecto particularmente importante em programas de grande porte.
24
Pilha
uma lista linear em que todas as inseres, retiradas e, geralmente, todos os acessos so feitos em apenas um extremo da lista. Os itens so colocados um sobre o outro. O item inserido mais recentemente est no topo e o inserido menos recentemente no fundo. O modelo intuitivo o de um monte de pratos em uma prateleira, sendo conveniente retirar ou adicionar pratos na parte superior. Esta imagem est freqentemente associada com a teoria de autmato, na qual o topo de uma pilha considerado como o receptculo de uma cabea de leitura/gravao que pode empilhar e desempilhar itens da pilha.
25
26
TAD Pilhas
Conjunto de operaes: 1. Cria uma pilha Vazia. 2. Verica se a lista est vazia. Retorna true se a pilha est vazia; caso contrrio, retorna false. 3. Empilhar o item x no topo da pilha. 4. Desempilhar o item x no topo da pilha, retirando-o da pilha. 5. Vericar o tamanho atual da pilha. Existem vrias opes de estruturas de dados que podem ser usadas para representar pilhas. As duas representaes mais utilizadas so as implementaes por meio de arranjos e de estruturas auto-referenciadas.
27
28
29
30
x1
T
. . .
T
xn1
T
topo
xn
31
32
33
34
35
ET - Implementao
Este programa utiliza um tipo abstrato de dados sem conhecer detalhes de sua implementao. A implementao do TAD Pilha que utiliza arranjo pode ser substituda pela implementao que utiliza estruturas auto-referenciadas sem causar impacto no programa.
package cap3; import cap3. arranjo . Pilha ; / / cia 11 public class ET { private class Definicoes { public static final int maxTam public static final char cancelaLinha public static f i n a l char saltaLinha public static f i n a l char marcaEof } private static void imprime( Pilha pilha )throws Exception { Pilha pilhaAux = new Pilha ( Definicoes .maxTam) ; Character x ; / / Continua na prxima transparncia = 70; = \\ ; = ; = ~ ; public static final char cancelaCarater = # ; vide programa da transparn-
36
ET - Implementao
while ( ! pilha . vazia ( ) ) { x = (Character ) pilha .desempilha ( ) ; pilhaAux .empilha ( x ) ; } while ( ! pilhaAux . vazia ( ) ) { x = (Character ) pilhaAux .desempilha ( ) ; System. out . print ( x ) ; } System. out . print ( \n ) ; } public static void main ( String [ ] args ) { Pilha pilha = new Pilha ( Definicoes .maxTam) ; try { char c = (char) System. in .read ( ) ; Character x = new Character ( c ) ; i f ( x .charValue () == \n ) x = new Character ( ) ; while ( x .charValue ( ) ! = Definicoes .marcaEof) { i f ( x .charValue () == Definicoes . cancelaCarater ) { i f ( ! pilha . vazia ( ) ) x = (Character ) pilha .desempilha ( ) ; } else i f ( x .charValue () == Definicoes . cancelaLinha) pilha = new Pilha ( Definicoes .maxTam) ; / / Continua na prxima transparncia
37
ET - Implementao
else i f ( x .charValue () == Definicoes . saltaLinha ) imprime ( pilha ) ; else { i f ( pilha .tamanho () == Definicoes .maxTam) imprime ( pilha ) ; pilha .empilha ( x ) ; } c = (char) System. in .read ( ) ; x = new Character ( c ) ; i f ( x .charValue () == \n ) x = new Character ( ) ; } i f ( ! pilha . vazia ( ) ) imprime ( pilha ) ; } catch ( Exception e) { System. out . println (e.getMessage ( ) ) ; } } }
38
Filas
uma lista linear em que todas as inseres so realizadas em um extremo da lista, e todas as retiradas e, geralmente, os acessos so realizados no outro extremo da lista. O modelo intuitivo de uma la o de uma la de espera em que as pessoas no incio da la so servidas primeiro e as pessoas que chegam entram no m da la. So chamadas listas fo (rst-in, rst-out). Existe uma ordem linear para las que a ordem de chegada. So utilizadas quando desejamos processar itens de acordo com a ordem primeiro-que-chega, primeiro-atendido. Sistemas operacionais utilizam las para regular a ordem na qual tarefas devem receber processamento e recursos devem ser alocados a processos.
39
TAD Filas
Conjunto de operaes: 1. Criar uma la vazia. 2. Enleirar o item x no nal da la. 3. Desenleirar. Essa funo retorna o item x no incio da la e o retira da la. 4. Vericar se a la est vazia. Essa funo retorna true se a la est vazia; do contrrio, retorna false.
40
41
A la se encontra em posies contguas de memria, em alguma posio do crculo, delimitada pelos apontadores frente e trs. Para enleirar, basta mover o apontador trs uma posio no sentido horrio. Para desenleirar, basta mover o apontador frente uma posio no sentido horrio.
42
43
44
x1
xn
T
E nil
frente
trs
45
46