FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO

Prof. Carlos Roberto Paviotti E-Mail: carlinhos@cneccapivari.br
1

FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO

LISTAS
Uma lista é uma forma de organização através da enumeração de dados para melhor visualização da informação.
Existem vários tipos de implementação de listas como estruturas de dados: Listas FIFO, ou filas (First In First Out - primeiro a entrar, primeiro a sair). Listas LIFO, ou pilhas (Last In First Out - último a entrar, primeiro a sair). Listas duplamente ligadas
2

FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO

LISTAS
Lista - série de elementos. Lista - é a seqüência linear de itens, cuja principal propriedade estrutural é a posição relativa dos elementos dentro da seqüência. Exemplos de aplicação de listas: Trem com vagões que podem ser removidos ou incluídos Relação de nomes de alunos da folha de chamada, em ordem alfabética Relação de notas de alunos 3 Relação de empregados de uma empresa

.Características Seqüência Finita de Elementos Adriana Adriano Ana .FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS . Zaqueu seqüência finita de elementos 4 ..

. posição = 3 Zaqueu posição = 1 5 .Características Seqüência Finita de Elementos Adriano Adriana Ana .FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS ..

.Características Seqüência: próximo e anterior Adriano Adriana Ana .. Zaqueu sucessor predecessor (próximo) (anterior) 6 .FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS .

FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS .Características Seqüência: início e fim Adriano Adriana Ana .. tail) 7 . Zaqueu início (cabeça.. head) final (fim.

FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS .Características Comprimento Adriano Adriana Ana Pedro Tânia Zaqueu Comprimento = 6 Lista Vazia Comprimento = 0 8 .

B 9 Adriana 12 Ana Pedro 8.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS ....Características Lista homogênea Adriana Pedro Ana . Zaqueu Lista heterogênea (não é usual) .5 ..

.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS .. Zaqueu Lista não-ordenada Ana Zaqueu Adriano ..Características Lista ordenada Adriana Adriano Ana .. Adriana 10 .

Operações Que operações podem ser feitas sobre uma lista??? 14 32 7 .FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS .. 5 11 ..

.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS .....Operações p Inserção de elemento 56 início 14 32 7 . 5 . 5 14 14 32 32 7 7 .. 56 final 56 5 posição = 3 12 .

.Operações p Remoção de elemento 14 início 32 7 . 5 final 5 posição = 3 13 . .... 5 14 14 32 32 7 7 ...FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS .

5 todos os elementos 14 32 7 . 5 14 .: posição = 3) 14 32 7 .FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS ......: >5 E < 15) 14 32 7 .Operações p Consulta por posição (Ex. 5 por condição (Ex..

ii) x1 é o primeiro elemento. n u 0. tem uma estrutura de lista linear para uma determinada relação de precedência quando : i) existem n elementos na seqüência. . v) se i = j .1 então xi é o antecessor de xj e xj é o sucessor de xi. 15 . se i < j. então xi precede xj.. j e n. . xn }. iv)  1 e i. .FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS ± Definições Um conjunto de elementos X = { x1. iii) xn é o último elemento.

FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS Vimos que uma estrutura de dados deve definir duas coisas: 1. A maneira como a informação será armazenada. A interface de uso com o usuário. 2. Array Encadeamento 16 .

0 e1 1 e2 2 e3 3 e4 4 e5 5 e6 6 e7 7 . 8 en 9 ... M 17 ..FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS ± Implementação com ARRAY Os elementos ficam justapostos na memória através da utilização de um vetor unidimensional..

.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS ± Implementação com Encadeamento Os elementos estão associados entre si através de elos.. en 18 . e1 e2 .

FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS Observações: ‡ Cada implementação tem uma maneira particular de armazenar os dados. que trará vantagens e desvantagens em determinados casos. ‡ Cabe ao desenvolvedor conhecer esses casos e saber fazer a melhor escolha conforme o problema enfrentado. 19 . em termos de uso de memória e tempo consumido para cada operação.

vamos querer adicionar elementos então precisamos de algumas operações de adição. ‡ Talvez duas operações já sejam suficientes. definiremos apenas a interface de uso que a Lista deve fornecer ao usuário. uma que permita adicionar um elemento no fim da Lista e outra que deixe o usuário escolher a posição onde ele quer adicionar um elemento.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS Primeiramente. ‡ Com certeza. 20 .

‡ Outro tipo de operação necessária e o de remover elementos. Esta operação deve receber a posição do elemento que deve ser removido.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS ‡ Precisaremos recuperar elementos então vamos definir uma operação que dado uma posição da Lista ela devolve o elemento que está lá. 21 .

22 . uma operação que será bastante útil é uma que informe a quantidade de elementos da Lista.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS ‡ Seria interessante que a Lista tivesse também uma operação para verificar se um dado elemento está contido na Lista. ‡ Por fim.

4. 5.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS Uma vez definidas todas as operações temos então a interface de uso da nossa estrutura de dados: 1. 2. Informa a quantidade de elementos da Lista. Verifica se um dado elemento está contido na Lista. Remove o elemento de uma dada posição. Pega o elemento de uma dada posição. 6. Adiciona um dado elemento em um dada posição. 3. Adiciona um dado elemento no fim da Lista. 23 .

Estes testes poderão ser executados durante o desenvolvimento e não somente no fim. Isso é interessante pois possibilita a eliminar erros mais rápido.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS Observações: ‡ Quando programamos pensando primeiro na interface. e pode evitar erros em cascata (erros que são causados por outros erros). 24 . logo que eles aparecem. ‡ Se sabemos como usar a estrutura já sabemos como testá-la. já sabemos como usar a estrutura que ainda nem desenvolvemos.

‡ Em um sistema orientado a OBJETOS. devemos criar uma receita de construir objetos . precisamos definir como ele deve ser e o que ele deve fazer. ‡ Este sistema deve ser orientado a objetos e deve de alguma forma representar os alunos. ‡ Para criar objetos. ou seja.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS Modelagem ‡ Queremos desenvolver um sistema para resolver o problema da listagem de alunos. um aluno será representado por um objeto. 25 . ‡ Em termos técnicos esta receita é uma Classe.

} } 26 .FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO public class Aluno { private String nome.nome).nome.} public void setNome(String nome) { this.} public String toString(){ return this.equals(outro.nome = nome. } public boolean equals(Object o){ Aluno outro = (Aluno)o.nome. public String getNome(){ return nome. return this.

‡ Teremos apenas alguns poucos atributos nessa classe. e alguns pares de getters e setters. Vale lembrar que não é boa prática ter classes que apenas carregam dados: seria mais interessante que Aluno também tivesse métodos de negócio.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS Observações: ‡ Com a classe Aluno. 27 . o sistema é capaz de criar objetos para representar os alunos da instituição.

‡ Devemos tomar cuidado no método equals(Object) pois estamos correndo o risco de dois tipos de erro. . ‡ O primeiro será útil para imprimir os alunos na tela. ‡ O segundo servirá para comparar dois objetos do tipo Aluno. o critério de comparação será os nomes dos alunos. ‡ O segundo ocorre quando ou a referência do parâmetro é 28 null ou o atributo nome está null.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS Observações: ‡ Perceba que reescrevemos os métodos toString() e equals(Object). ‡ O primeiro acontece quando a referência recebida no parâmetro não está apontando para um objeto do tipo Aluno.

FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS ARRAY ‡ Para resolver o problema da listagem de alunos. 29 . vamos implementar uma Lista ‡ A interface da Lista já foi definida. onde se refere ao armazenamento seqüencial.

: Array ‡ Para facilitar o acesso aos alunos.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS Quantos Alunos serão armazenados na memória? 100 Fig. dividiremos o espaço de memória alocado em pequenos pedaços idênticos. ‡ Cada pedaço (quadrado) armazenará um aluno. 30 . ‡ Devemos indexar (numerar) os pequenos pedaços para ser fácil recuperar um aluno.

31 . Em Java. este recurso é chamado de Array. ‡ Um array é uma porção de memória fixa e seqüencial dividida em pedaços idênticos indexados a partir do 0.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS ‡ Praticamente todas as linguagens de programação têm um recurso similar ao que descrevemos acima.

Não é possível redimensionar um array em Java. cada posição pode guardar uma referência para um objeto do tipo Aluno. 32 . Na verdade. teremos de contornar isso mais adiante. ‡ A capacidade de um array é fixa e deve ser informada no momento da criação do array.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS ‡ Em cada posição do array. podemos guardar um aluno.

Fig.:po 33 .FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS ‡ Uma Lista implementada co operações de uma Lista. encapsulando o acesso a esta Array.

// Declarando e Inicializando um array de Aluno com capacidade 100. // apenas para compilar } 34 } . // apenas para compilar} public int tamanho(){ // implementação return 0. public void adiciona(Aluno aluno) { // implementação } public void adiciona(int posicao.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO public class Vetor { private Aluno[] alunos = new Aluno[100]. // apenas para compilar} public void remove(int posicao){ // implementação } public boolean contem(Aluno aluno){ // implementação return false. Aluno aluno){ // implementação } public Aluno pega(int posicao){ // implementação return null.

FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS Primeiros testes: ‡ Como temos a interface do Vetor já bem definida. podemos criar alguns testes antes mesmo de começar a implementar o código. 35 . ‡ Criaremos testes para cada uma das operações.

Rafael] ‡ Pegar um aluno por posição Saída: [Rafael. false ‡ Informar o tamanho da lista Saída: 2 e 3 36 . Paulo] ‡ Adiciona em uma dada posição Saída: [Paulo.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS Primeiros testes: ‡ Adiciona no fim da lista Saída: [Rafael. true. Paulo] ‡ Remover um aluno por posição Saída: [Paulo] ‡ Verificar se a lista contem um dado aluno Saída: true. Ana.

criaríamos testes unitários. ‡ Em uma aplicação profissional Java. utilizando bibliotecas auxiliares. para facilitar a escrita destes mesmos testes. 37 .FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS ‡ Estes testes podem ser rodados a medida que preenchemos nosso Vetor com sua respectiva implementação. como JUnit ou TestNG.

onde escreveríamos primeiro os testes das nossas classes. antes mesmo de começar a escrever a sua classe. TDD) é uma prática que ganha cada vez mais força.FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO LISTAS ‡ O desenvolvimento dirigido a testes (Test Driven Development. pois uma classe com muitas dependências e acoplamento é difícil ser testada. 38 . ‡ O intuito disso é que você acaba apenas criando as classes e os métodos que realmente necessita. e eles já estão testados! ‡ O design da classe também costuma sair mais simples.

FACULDADE CENECISTA DE CAPIVARI CURSO SUPERIOR DE SISTEMAS DE INFORMAÇÃO FIM .