prof. jesus josé de oliveira netoprofessor.pucgoias.edu.br/sitedocente/admin/arquiv...os elementos...

34
Prof. Jesus José de Oliveira Neto

Upload: others

Post on 31-Dec-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

Prof. Jesus José de Oliveira Neto

Page 2: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

� Encapsulam a representação dos dados e as operações que podem ser realizadas sobre eles

� Usuário do TAD vs. programador do TAD

◦ Usuário só “enxerga” a interface, não a implementação

◦ Não importa se a representação é feita com palitos, números decimais, ou em binário desde que a gente consiga somar, subtrair, multiplicar, etc.

� Os usuários de um TAD só têm acesso às operações disponibilizadas sobre os dados

Page 3: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

� Podemos modificar a implementação do TAD sem modificar o código que usa o TAD

� E vice-versa, podemos modificar o código que usa o TAD sem modificar a implementação do TAD

� TAD pode ser reaproveitado em vários programas

Page 4: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

� Listas encadeadas ou listas ligadas representam uma sequência de objetos na memória do computador.

� Exemplo: Lista de afazeres

1. Comprar uma lâmpada

2. Trocar uma lâmpada queimada

3. Procurar uma conta no quarto

4. Pagar uma conta na internet

5. Desligar o computador

6. Dormir

Page 5: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

PróximaaçãoAção atual

� Na lista de afazeres anterior, uma tarefa dependia da execução da tarefa anterior

Page 6: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

21. Comprar lâmpada

32. Trocar lâmpada

43. Procurar conta

54. Pagar conta

65. Desligar micro

fim6. Dormir

Page 7: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

� Podemos realizar algumas operações sobre uma lista encadeadas, tais como:

◦ Inserir itens;

◦ Retirar itens;

◦ Buscar itens.

� Para manter a lista ordenada, após realizar alguma dessas operações, será necessário apenas movimentar alguns elementos (de um a três elementos).

Page 8: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

� Outras operações possíveis:

◦ Criar uma lista

◦ Destruir uma lista

◦ Ordenar uma lista

◦ Intercalar duas listas

◦ Concatenar duas listas

◦ Dividir uma lista em duas

◦ Copiar uma lista em outra

Page 9: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

DormirDesligar micro

Pagar conta

Procurar conta

Trocar lâmpada

� Como representar a lista anterior em um programa escrito na Linguagem Java?◦ Primeira opção: vetores ou matrizes

Comprar lâmpada

Tarefa:

Índice: 1 2 3 4 5 6

Page 10: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

� Primeira opção: vetores ou matrizes◦ Como acrescentar “Ligar micro”?

DormirDesligar micro

Pagar contaLigar micro

Procurar conta

Trocar lâmpada

Comprar lâmpada

Tarefa:

Índice: 1 2 3 4 5 6 7

Page 11: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

� Primeira opção: vetores ou matrizes◦ Os itens da lista são armazenados em posições

contíguas de memória.

◦ A lista pode ser percorrida em qualquer direção.

◦ A inserção de um novo item pode ser realizada após o último item com custo constante.

◦ A inserção de um novo item no meio da lista requer um deslocamento de todos os itens localizados após o ponto de inserção.

◦ Retirar um item do início da lista requer um deslocamento de itens para preencher o espaço deixado vazio.

Page 12: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

class ListaVetores { static final int MAX = 10;static double vetor[] = new double[MAX];static int tamanho = 0;static int p;...

};

class ListaVetores { static final int MAX = 10;static double vetor[] = new double[MAX];static int tamanho = 0;static int p;...

};

Vetor que armazenará os itens da lista

Page 13: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

� Existem três situações a serem consideradas◦ Quando existe espaço no vetor para inserir um

novo elemento;

◦ Quando o vetor está vazio e;

◦ Quando o vetor está cheio.

� Cada situação exige um tratamento diferente

Page 14: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

... ... ... ... ... ...

0 1 2 3 4 5

p

� Lista vazia

� Insere elemento 1.7 na posição zero

1.7 ... ... ... ... ...

0 1 2 3 4 5

p

Page 15: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

5

� Lista cheia

� Tenta inserir um novo elemento

� Erro! O vetor já está cheio! ◦ O tamanho da lista é igual ao tamanho do vetor◦ Seria necessário remover pelo menos um elemento

da lista

1.4 2.2 3.5 4.0 5.7 9.8

0 1 2 3 4 5

p

Page 16: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

static void inserir(double valor){

int p = 0;

if(listaEstaVazia()) {vetor[p] = valor;tamanho++;

}

else if(listaEstaCheia()) {System.out.println("Lista cheia. Não foipossível adicionar novo elemento.");

}...

static void inserir(double valor){

int p = 0;

if(listaEstaVazia()) {vetor[p] = valor;tamanho++;

}

else if(listaEstaCheia()) {System.out.println("Lista cheia. Não foipossível adicionar novo elemento.");

}...

Page 17: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

1.4 2.2 3.5 4.0 ... ...

0 1 2 3 4 5

� Exemplo: Lista de tamanho 4

� Novo elemento 3.3

1.4 2.2 3.3 3.5 4.0 ...

0 1 2 3 4 5

p

� Encontrar a posição correta para o elemento 3.3

Page 18: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

1.4 2.2 3.5 4.0 ... ...

0 1 2 3 4 5

p

� 3.3 é maior que 1.4

� Então a variável p é deslocada uma posição

� O próximo elemento a ser comparado é 2.2

1.4 2.2 3.5 4.0 ... ...

0 1 2 3 4 5

p

Page 19: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

1.4 2.2 3.5 4.0 ... ...

0 1 2 3 4 5

p

� 3.3 é também maior que 2.2

� Mais uma vez a variável p é deslocada uma posição

� O próximo elemento a ser comparado é 3.5

1.4 2.2 3.5 4.0 ... ...

0 1 2 3 4 5

p

Page 20: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

1.4 2.2 3.5 4.0 ... ...

0 1 2 3 4 5

p

� 3.3 é menor que 2.2

� O valor 3.3 é colocada na posição onde estava o valor 3.5

� Os demais valores depois de 3.3 são deslocados para direita

1.4 2.2 3.3 3.5 4.0 ...

0 1 2 3 4 5

p

Page 21: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

...else {

while(p < tamanho && vetor[p] < valor) {p++;

}

for(int i = tamanho - 1; i >= p; i--) {vetor[i + 1] = vetor[i];

}

vetor[p] = valor;tamanho++;

}}

...else {

while(p < tamanho && vetor[p] < valor) {p++;

}

for(int i = tamanho - 1; i >= p; i--) {vetor[i + 1] = vetor[i];

}

vetor[p] = valor;tamanho++;

}}

Page 22: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

� Existem três situações a serem consideradas◦ Quando a lista está vazia

◦ Quando o elemento não é encontrado

◦ Quando o elemento é encontrado e removido

� Cada situação exige um tratamento diferente

Page 23: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

� Ao tentar remover um elemento de uma lista vazia, nenhuma ação deve ser realizada◦ Exceto informar que a lista está vazia

� Ao tentar remover um elemento que não se encontra na lista◦ Informar que o elemento não foi encontrado

Page 24: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

1.4 2.2 3.3 3.5 4.0 ...

0 1 2 3 4 5

� Retirar o elemento 3.5

� Elemento encontrado

1.4 2.2 3.3 3.5 4.0 ...

0 1 2 3 4 5

p

p

Page 25: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

1.4 2.2 3.3 4.0 ... ...

0 1 2 3 4 5

� Lista depois da remoção do elemento 3.5

p

Page 26: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

static void retira(double valor){

int p = 0;

if(listaEstaVazia()){

System.out.println("Lista vazia.");}

else{

while(p < MAX && vetor[p] != valor){

p++;}...

static void retira(double valor){

int p = 0;

if(listaEstaVazia()){

System.out.println("Lista vazia.");}

else{

while(p < MAX && vetor[p] != valor){

p++;}...

Page 27: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

...if(p == MAX) {

System.out.println("Elemento não encontrado.");

}

else {for(int i = p; i < tamanho - 1; i++) {

vetor[i] = vetor[i + 1];}tamanho--;

}}

}

...if(p == MAX) {

System.out.println("Elemento não encontrado.");

}

else {for(int i = p; i < tamanho - 1; i++) {

vetor[i] = vetor[i + 1];}tamanho--;

}}

}

Page 28: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

static double busca(double valor) {if(listaEstaVazia()) {

System.out.println("A lista está vazia.");}

else {for(int i = 0; i < tamanho; i++) {

if(vetor[i] == valor) {System.out.println("Elemento encontradona posição: " + i);

return valor;}

}}return -1;

}

static double busca(double valor) {if(listaEstaVazia()) {

System.out.println("A lista está vazia.");}

else {for(int i = 0; i < tamanho; i++) {

if(vetor[i] == valor) {System.out.println("Elemento encontradona posição: " + i);

return valor;}

}}return -1;

}

Page 29: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

static void imprime(){

if(listaEstaVazia()){

System.out.println("A lista está vazia.");}else{

for(int i = 0; i < tamanho; i++){

System.out.print(vetor[i] + " ");}

System.out.println();}

}

static void imprime(){

if(listaEstaVazia()){

System.out.println("A lista está vazia.");}else{

for(int i = 0; i < tamanho; i++){

System.out.print(vetor[i] + " ");}

System.out.println();}

}

Page 30: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

static boolean listaEstaVazia(){

return tamanho == 0; }

static boolean listaEstaCheia(){

return tamanho == MAX;}

static boolean listaEstaVazia(){

return tamanho == 0; }

static boolean listaEstaCheia(){

return tamanho == MAX;}

� Métodos que verificam se a lista está cheia ou vazia

Page 31: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

public static void main(String[] args){

inserir(20.0f);inserir(44.5f);inserir(33.3f);inserir(20.9f);imprime();

double n = busca(20.9f);//Busca

if (n != -1){System.out.println("Encontrado:"+n);retira(n);

}…

public static void main(String[] args){

inserir(20.0f);inserir(44.5f);inserir(33.3f);inserir(20.9f);imprime();

double n = busca(20.9f);//Busca

if (n != -1){System.out.println("Encontrado:"+n);retira(n);

}…

Page 32: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

� O código acima serve para testar as funcionalidades oferecidas pela lista encadeada por vetor

� São inseridos 4 elementos na lista os quais são exibidos na tela

� Em seguida busca-se um determinado elemento que se encontrado então é retirado da lista

Page 33: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

…System.out.println("Configuracao da lista:");imprime();

retira(21.9); // Elemento não encontradoretira(44.5); // Elemento deletadoretira(29.4); // Elemento não encontrado

System.out.println("Configuracao da lista:");imprime();

}

…System.out.println("Configuracao da lista:");imprime();

retira(21.9); // Elemento não encontradoretira(44.5); // Elemento deletadoretira(29.4); // Elemento não encontrado

System.out.println("Configuracao da lista:");imprime();

}

Page 34: Prof. Jesus José de Oliveira Netoprofessor.pucgoias.edu.br/SiteDocente/admin/arquiv...Os elementos da lista são exibidos novamente Nota-se que o código tenta retirar elementos que

� Os elementos da lista são exibidos novamente

� Nota-se que o código tenta retirar elementos que não existem na lista◦ Neste caso, a lista informa que o elemento não foi

encontrado

� A lista é impressa novamente