SlideShare uma empresa Scribd logo
1 de 116
Baixar para ler offline
Aula 21 – Listas Ligadas
Norton Trevisan Roman
12 de maio de 2020
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 1 / 33
Listas Ligadas
Considere nosso
condom´ınio
class Projeto {
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Projeto p = new Projeto(2);
p.adicionaRes(r1);
p.adicionaRes(r2);
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 2 / 33
Listas Ligadas
Considere nosso
condom´ınio
E se, durante a
execu¸c˜ao,
precis´assemos alocar
mais uma casa
(al´em dos limites do
condom´ınio)?
class Projeto {
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Projeto p = new Projeto(2);
p.adicionaRes(r1);
p.adicionaRes(r2);
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 2 / 33
Listas Ligadas
Considere nosso
condom´ınio
E se, durante a
execu¸c˜ao,
precis´assemos alocar
mais uma casa
(al´em dos limites do
condom´ınio)?
class Projeto {
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Projeto p = new Projeto(2);
p.adicionaRes(r1);
p.adicionaRes(r2);
Residencia r3 = new Residencia(cq2, null);
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 2 / 33
Listas Ligadas
Considere nosso
condom´ınio
E se, durante a
execu¸c˜ao,
precis´assemos alocar
mais uma casa
(al´em dos limites do
condom´ınio)?
N˜ao haver´a espa¸co
alocado para ela no
arranjo
class Projeto {
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Projeto p = new Projeto(2);
p.adicionaRes(r1);
p.adicionaRes(r2);
Residencia r3 = new Residencia(cq2, null);
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 2 / 33
Listas Ligadas
Que fazer?
class Projeto {
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Projeto p = new Projeto(2);
p.adicionaRes(r1);
p.adicionaRes(r2);
Residencia r3 = new Residencia(cq2, null);
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
Listas Ligadas
Que fazer?
Alocar um novo
arranjo maior
class Projeto {
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Projeto p = new Projeto(2);
p.adicionaRes(r1);
p.adicionaRes(r2);
Residencia r3 = new Residencia(cq2, null);
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
Listas Ligadas
Que fazer?
Alocar um novo
arranjo maior
class Projeto {
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Projeto p = new Projeto(2);
p.adicionaRes(r1);
p.adicionaRes(r2);
Residencia r3 = new Residencia(cq2, null);
Residencia[] maior = new Residencia[3];
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
Listas Ligadas
Que fazer?
Alocar um novo
arranjo maior
Copiar o conte´udo do
velho nesse
class Projeto {
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Projeto p = new Projeto(2);
p.adicionaRes(r1);
p.adicionaRes(r2);
Residencia r3 = new Residencia(cq2, null);
Residencia[] maior = new Residencia[3];
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
Listas Ligadas
Que fazer?
Alocar um novo
arranjo maior
Copiar o conte´udo do
velho nesse
class Projeto {
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Projeto p = new Projeto(2);
p.adicionaRes(r1);
p.adicionaRes(r2);
Residencia r3 = new Residencia(cq2, null);
Residencia[] maior = new Residencia[3];
maior[0] = p.condominio[0];
maior[1] = p.condominio[1];
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
Listas Ligadas
Que fazer?
Alocar um novo
arranjo maior
Copiar o conte´udo do
velho nesse
Incluir a nova casa
class Projeto {
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Projeto p = new Projeto(2);
p.adicionaRes(r1);
p.adicionaRes(r2);
Residencia r3 = new Residencia(cq2, null);
Residencia[] maior = new Residencia[3];
maior[0] = p.condominio[0];
maior[1] = p.condominio[1];
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
Listas Ligadas
Que fazer?
Alocar um novo
arranjo maior
Copiar o conte´udo do
velho nesse
Incluir a nova casa
class Projeto {
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Projeto p = new Projeto(2);
p.adicionaRes(r1);
p.adicionaRes(r2);
Residencia r3 = new Residencia(cq2, null);
Residencia[] maior = new Residencia[3];
maior[0] = p.condominio[0];
maior[1] = p.condominio[1];
maior[2] = r3;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
Listas Ligadas
Que fazer?
Alocar um novo
arranjo maior
Copiar o conte´udo do
velho nesse
Incluir a nova casa
Substituir o arranjo
antigo pelo maior
class Projeto {
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Projeto p = new Projeto(2);
p.adicionaRes(r1);
p.adicionaRes(r2);
Residencia r3 = new Residencia(cq2, null);
Residencia[] maior = new Residencia[3];
maior[0] = p.condominio[0];
maior[1] = p.condominio[1];
maior[2] = r3;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
Listas Ligadas
Que fazer?
Alocar um novo
arranjo maior
Copiar o conte´udo do
velho nesse
Incluir a nova casa
Substituir o arranjo
antigo pelo maior
class Projeto {
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Projeto p = new Projeto(2);
p.adicionaRes(r1);
p.adicionaRes(r2);
Residencia r3 = new Residencia(cq2, null);
Residencia[] maior = new Residencia[3];
maior[0] = p.condominio[0];
maior[1] = p.condominio[1];
maior[2] = r3;
p.condominio = maior;
p.ultimo++;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
Listas Ligadas
Que fazer?
Alocar um novo
arranjo maior
Copiar o conte´udo do
velho nesse
Incluir a nova casa
Substituir o arranjo
antigo pelo maior
Incrivelmente
ineficiente
class Projeto {
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Projeto p = new Projeto(2);
p.adicionaRes(r1);
p.adicionaRes(r2);
Residencia r3 = new Residencia(cq2, null);
Residencia[] maior = new Residencia[3];
maior[0] = p.condominio[0];
maior[1] = p.condominio[1];
maior[2] = r3;
p.condominio = maior;
p.ultimo++;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
Listas Ligadas
Deveria haver um modo de simplesmente
aumentarmos o arranjo
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 4 / 33
Listas Ligadas
Deveria haver um modo de simplesmente
aumentarmos o arranjo
Com arranjos... n˜ao
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 4 / 33
Listas Ligadas
Deveria haver um modo de simplesmente
aumentarmos o arranjo
Com arranjos... n˜ao
Alternativa: Lista Ligada
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 4 / 33
Listas Ligadas
Deveria haver um modo de simplesmente
aumentarmos o arranjo
Com arranjos... n˜ao
Alternativa: Lista Ligada
Uma lista ligada ´e uma lista onde cada elemento –
chamado de n´o – cont´em um valor e uma referˆencia
para o elemento seguinte na lista
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 4 / 33
Listas Ligadas
Deveria haver um modo de simplesmente
aumentarmos o arranjo
Com arranjos... n˜ao
Alternativa: Lista Ligada
Uma lista ligada ´e uma lista onde cada elemento –
chamado de n´o – cont´em um valor e uma referˆencia
para o elemento seguinte na lista
Assim, sabendo onde est´a o primeiro elemento da lista,
podemos chegar a qualquer outro elemento
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 4 / 33
Listas Ligadas
Simples:
el1 el2 . . . eln
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 5 / 33
Listas Ligadas
Simples:
el1 el2 . . . eln
Circular:
el1 el2 . . . eln
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 5 / 33
Listas Ligadas
Simples:
el1 el2 . . . eln
Circular:
el1 el2 . . . eln
Duplamente ligada:
el1 el2 . . . eln
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 5 / 33
Listas Ligadas
Simples:
el1 el2 . . . eln
Circular:
el1 el2 . . . eln
Duplamente ligada:
el1 el2 . . . eln
Etc
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 5 / 33
Listas Ligadas
Dado armazenado:
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 6 / 33
Listas Ligadas
Dado armazenado:
(Endere¸co de) objeto
Residencia
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 6 / 33
Listas Ligadas
Dado armazenado:
(Endere¸co de) objeto
Residencia
Criando o n´o:
public class No {
Residencia r;
No prox = null;
public No(Residencia r) {
this.r = r;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 6 / 33
Listas Ligadas
Dado armazenado:
(Endere¸co de) objeto
Residencia
Criando o n´o:
Temos o dado armazenado
public class No {
Residencia r;
No prox = null;
public No(Residencia r) {
this.r = r;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 6 / 33
Listas Ligadas
Dado armazenado:
(Endere¸co de) objeto
Residencia
Criando o n´o:
Temos o dado armazenado
E uma referˆencia para o
pr´oximo elemento
public class No {
Residencia r;
No prox = null;
public No(Residencia r) {
this.r = r;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 6 / 33
Listas Ligadas
Criando uma lista
simples:
public class No {
Residencia r;
No prox = null;
public No(Residencia r) {
this.r = r;
}
}
public class ListaSimples {
No cabeca;
public ListaSimples() {
this.cabeca = null;
}
public void insere(Residencia el) {
No aux = new No(el);
aux.prox = this.cabeca;
this.cabeca = aux;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 7 / 33
Listas Ligadas
Criando uma lista
simples:
cabe¸ca
public class No {
Residencia r;
No prox = null;
public No(Residencia r) {
this.r = r;
}
}
public class ListaSimples {
No cabeca;
public ListaSimples() {
this.cabeca = null;
}
public void insere(Residencia el) {
No aux = new No(el);
aux.prox = this.cabeca;
this.cabeca = aux;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 7 / 33
Listas Ligadas
Inserindo elemento no
in´ıcio:
cabe¸ca
public class No {
Residencia r;
No prox = null;
public No(Residencia r) {
this.r = r;
}
}
public class ListaSimples {
No cabeca;
public ListaSimples() {
this.cabeca = null;
}
public void insere(Residencia el) {
No aux = new No(el);
aux.prox = this.cabeca;
this.cabeca = aux;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 8 / 33
Listas Ligadas
Inserindo elemento no
in´ıcio:
Crie o novo elemento a
ser inserido
cabe¸cael
aux
public class No {
Residencia r;
No prox = null;
public No(Residencia r) {
this.r = r;
}
}
public class ListaSimples {
No cabeca;
public ListaSimples() {
this.cabeca = null;
}
public void insere(Residencia el) {
No aux = new No(el);
aux.prox = this.cabeca;
this.cabeca = aux;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 8 / 33
Listas Ligadas
Inserindo elemento no
in´ıcio:
Crie o novo elemento a
ser inserido
Fa¸ca o elemento do in´ıcio
da lista ser seu pr´oximo
cabe¸ca
el
aux
public class No {
Residencia r;
No prox = null;
public No(Residencia r) {
this.r = r;
}
}
public class ListaSimples {
No cabeca;
public ListaSimples() {
this.cabeca = null;
}
public void insere(Residencia el) {
No aux = new No(el);
aux.prox = this.cabeca;
this.cabeca = aux;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 8 / 33
Listas Ligadas
Inserindo elemento no
in´ıcio:
Crie o novo elemento a
ser inserido
Fa¸ca o elemento do in´ıcio
da lista ser seu pr´oximo
Torne esse novo elemento
o novo in´ıcio da lista
cabe¸ca el
aux
public class No {
Residencia r;
No prox = null;
public No(Residencia r) {
this.r = r;
}
}
public class ListaSimples {
No cabeca;
public ListaSimples() {
this.cabeca = null;
}
public void insere(Residencia el) {
No aux = new No(el);
aux.prox = this.cabeca;
this.cabeca = aux;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 8 / 33
Listas Ligadas
E se a lista j´a tiver
algo?
el2 el1
cabe¸ca
public class No {
Residencia r;
No prox = null;
public No(Residencia r) {
this.r = r;
}
}
public class ListaSimples {
No cabeca;
public ListaSimples() {
this.cabeca = null;
}
public void insere(Residencia el) {
No aux = new No(el);
aux.prox = this.cabeca;
this.cabeca = aux;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 9 / 33
Listas Ligadas
E se a lista j´a tiver
algo?
el2 el1
cabe¸ca
el
aux
public class No {
Residencia r;
No prox = null;
public No(Residencia r) {
this.r = r;
}
}
public class ListaSimples {
No cabeca;
public ListaSimples() {
this.cabeca = null;
}
public void insere(Residencia el) {
No aux = new No(el);
aux.prox = this.cabeca;
this.cabeca = aux;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 9 / 33
Listas Ligadas
E se a lista j´a tiver
algo?
el2 el1
cabe¸ca
el
aux
public class No {
Residencia r;
No prox = null;
public No(Residencia r) {
this.r = r;
}
}
public class ListaSimples {
No cabeca;
public ListaSimples() {
this.cabeca = null;
}
public void insere(Residencia el) {
No aux = new No(el);
aux.prox = this.cabeca;
this.cabeca = aux;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 9 / 33
Listas Ligadas
E se a lista j´a tiver
algo?
el2 el1
cabe¸ca
el
aux
public class No {
Residencia r;
No prox = null;
public No(Residencia r) {
this.r = r;
}
}
public class ListaSimples {
No cabeca;
public ListaSimples() {
this.cabeca = null;
}
public void insere(Residencia el) {
No aux = new No(el);
aux.prox = this.cabeca;
this.cabeca = aux;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 9 / 33
Listas Ligadas
E como podemos usar
isso?
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 10 / 33
Listas Ligadas
E como podemos usar
isso?
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr,null);
Residencia r2 = new Residencia(cq,null);
Residencia r3 = new Residencia(cq2,null);
ListaSimples l = new ListaSimples();
l.insere(r1);
l.insere(r2);
l.insere(r3);
No n = l.cabeca;
while (n != null) {
System.out.println(n.r.casa.area());
n = n.prox;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 10 / 33
Listas Ligadas
E como podemos usar
isso?
Repare!
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr,null);
Residencia r2 = new Residencia(cq,null);
Residencia r3 = new Residencia(cq2,null);
ListaSimples l = new ListaSimples();
l.insere(r1);
l.insere(r2);
l.insere(r3);
No n = l.cabeca;
while (n != null) {
System.out.println(n.r.casa.area());
n = n.prox;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 10 / 33
Listas Ligadas
E como podemos usar
isso?
Repare!
N˜ao precisamos de
vari´avel auxiliar para
guardar o resultado de
um m´etodo
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr,null);
Residencia r2 = new Residencia(cq,null);
Residencia r3 = new Residencia(cq2,null);
ListaSimples l = new ListaSimples();
l.insere(r1);
l.insere(r2);
l.insere(r3);
No n = l.cabeca;
while (n != null) {
System.out.println(n.r.casa.area());
n = n.prox;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 10 / 33
Listas Ligadas
E como podemos usar
isso?
Repare!
N˜ao precisamos de
vari´avel auxiliar para
guardar o resultado de
um m´etodo
O computador ir´a buscar
o atributo r, de n
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr,null);
Residencia r2 = new Residencia(cq,null);
Residencia r3 = new Residencia(cq2,null);
ListaSimples l = new ListaSimples();
l.insere(r1);
l.insere(r2);
l.insere(r3);
No n = l.cabeca;
while (n != null) {
System.out.println(n.r.casa.area());
n = n.prox;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 10 / 33
Listas Ligadas
E como podemos usar
isso?
Repare!
N˜ao precisamos de
vari´avel auxiliar para
guardar o resultado de
um m´etodo
O computador ir´a buscar
o atributo r, de n
Ent˜ao olhar´a o atributo
casa, de r
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr,null);
Residencia r2 = new Residencia(cq,null);
Residencia r3 = new Residencia(cq2,null);
ListaSimples l = new ListaSimples();
l.insere(r1);
l.insere(r2);
l.insere(r3);
No n = l.cabeca;
while (n != null) {
System.out.println(n.r.casa.area());
n = n.prox;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 10 / 33
Listas Ligadas
Repare!
Finalmente, chamar´a o
m´etodo area() desse
atributo.
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr,null);
Residencia r2 = new Residencia(cq,null);
Residencia r3 = new Residencia(cq2,null);
ListaSimples l = new ListaSimples();
l.insere(r1);
l.insere(r2);
l.insere(r3);
No n = l.cabeca;
while (n != null) {
System.out.println(n.r.casa.area());
n = n.prox;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 11 / 33
Listas Ligadas
Repare!
Finalmente, chamar´a o
m´etodo area() desse
atributo.
Sa´ıda
$ java Projeto
64.0
100.0
150.0
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr,null);
Residencia r2 = new Residencia(cq,null);
Residencia r3 = new Residencia(cq2,null);
ListaSimples l = new ListaSimples();
l.insere(r1);
l.insere(r2);
l.insere(r3);
No n = l.cabeca;
while (n != null) {
System.out.println(n.r.casa.area());
n = n.prox;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 11 / 33
Listas Ligadas
Repare!
Finalmente, chamar´a o
m´etodo area() desse
atributo.
Sa´ıda
$ java Projeto
64.0
100.0
150.0
(Note que a ordem est´a
inversa `a de inser¸c˜ao)
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr,null);
Residencia r2 = new Residencia(cq,null);
Residencia r3 = new Residencia(cq2,null);
ListaSimples l = new ListaSimples();
l.insere(r1);
l.insere(r2);
l.insere(r3);
No n = l.cabeca;
while (n != null) {
System.out.println(n.r.casa.area());
n = n.prox;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 11 / 33
Listas Ligadas – Mudando Projeto
class Projeto {
Residencia[] condominio;
int ultimo = -1;
boolean adicionaRes(Residencia r) {
if (this.ultimo < this.condominio.length-1) {
ultimo++;
this.condominio[ultimo] = r;
return(true);
}
return(false);
}
Projeto(int tam) {
this.condominio = new Residencia[tam];
}
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Residencia r3 = new Residencia(cq2, null);
Projeto p = new Projeto(3);
p.adicionaRes(r1);
p.adicionaRes(r2);
p.adicionaRes(r3);
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 12 / 33
Listas Ligadas – Mudando Projeto
class Projeto {
Residencia[] condominio;
int ultimo = -1;
boolean adicionaRes(Residencia r) {
if (this.ultimo < this.condominio.length-1) {
ultimo++;
this.condominio[ultimo] = r;
return(true);
}
return(false);
}
Projeto(int tam) {
this.condominio = new Residencia[tam];
}
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Residencia r3 = new Residencia(cq2, null);
Projeto p = new Projeto(3);
p.adicionaRes(r1);
p.adicionaRes(r2);
p.adicionaRes(r3);
}
}
class Projeto {
ListaSimples condominio;
void adicionaRes(Residencia r) {
this.condominio.insere(r);
}
Projeto() {
this.condominio = new ListaSimples();
}
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
CasaQuad cq2 = new CasaQuad(8,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
Residencia r3 = new Residencia(cq2, null);
Projeto p = new Projeto();
p.adicionaRes(r1);
p.adicionaRes(r2);
p.adicionaRes(r3);
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 12 / 33
Listas Ligadas
Incluindo Elemento em uma Posi¸c˜ao (4a
)
el1 el2 el3 el4cabe¸ca
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 13 / 33
Listas Ligadas
Incluindo Elemento em uma Posi¸c˜ao (4a
)
Alocamos espa¸co para o novo elemento
el1 el2 el3 el4cabe¸ca
el5
q
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 13 / 33
Listas Ligadas
Incluindo Elemento em uma Posi¸c˜ao (4a
)
Alocamos espa¸co para o novo elemento
Marcamos o in´ıcio da lista
el1 el2 el3 el4cabe¸ca
el5
q
p
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 13 / 33
Listas Ligadas
Incluindo Elemento em uma Posi¸c˜ao (4a
)
Alocamos espa¸co para o novo elemento
Marcamos o in´ıcio da lista
Andamos at´e a (n-1)a
posi¸c˜ao:
el1 el2 el3 el4cabe¸ca
el5
q
p
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 13 / 33
Listas Ligadas
Incluindo Elemento em uma Posi¸c˜ao (4a
)
Fazemos o campo prox do novo elemento apontar
para o no
elemento da lista
el1 el2 el3 el4cabe¸ca
el5
q
p
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 14 / 33
Listas Ligadas
Incluindo Elemento em uma Posi¸c˜ao (4a
)
Fazemos o campo prox do novo elemento apontar
para o no
elemento da lista
Fazemos o elemento seguinte ao (n-1)o
ser o novo
elemento
el1 el2 el3 el4cabe¸ca
el5
q
p
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 14 / 33
Listas Ligadas
Isso contudo
funciona para
posi¸c˜oes > 0
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 15 / 33
Listas Ligadas
Isso contudo
funciona para
posi¸c˜oes > 0
E se for na posi¸c˜ao
0?
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 15 / 33
Listas Ligadas
Isso contudo
funciona para
posi¸c˜oes > 0
E se for na posi¸c˜ao
0?
J´a vimos inser¸c˜ao na
primeira posi¸c˜ao
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 15 / 33
Listas Ligadas
Isso contudo
funciona para
posi¸c˜oes > 0
E se for na posi¸c˜ao
0?
J´a vimos inser¸c˜ao na
primeira posi¸c˜ao
Ent˜ao...
public void insere(Residencia el, int pos) {
No q = new No(el);
if (pos == 0) {
q.prox = this.cabeca;
this.cabeca = q;
}
else {
No p = this.cabeca;
for (int i=0; i<pos-1; i++) p = p.prox;
q.prox = p.prox;
p.prox = q;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 15 / 33
Listas Ligadas
Naturalmente, falta
ainda verificar se n˜ao
tentamos colocar um
elemento ap´os o
´ultimo.
public void insere(Residencia el, int pos) {
No q = new No(el);
if (pos == 0) {
q.prox = this.cabeca;
this.cabeca = q;
}
else {
No p = this.cabeca;
for (int i=0; i<pos-1; i++) p = p.prox;
q.prox = p.prox;
p.prox = q;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 16 / 33
Listas Ligadas
Naturalmente, falta
ainda verificar se n˜ao
tentamos colocar um
elemento ap´os o
´ultimo.
Para isso, podemos
criar um m´etodo que
retorne o n´umero de
elementos da lista:
public void insere(Residencia el, int pos) {
No q = new No(el);
if (pos == 0) {
q.prox = this.cabeca;
this.cabeca = q;
}
else {
No p = this.cabeca;
for (int i=0; i<pos-1; i++) p = p.prox;
q.prox = p.prox;
p.prox = q;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 16 / 33
Listas Ligadas
Naturalmente, falta
ainda verificar se n˜ao
tentamos colocar um
elemento ap´os o
´ultimo.
Para isso, podemos
criar um m´etodo que
retorne o n´umero de
elementos da lista:
public void insere(Residencia el, int pos) {
No q = new No(el);
if (pos == 0) {
q.prox = this.cabeca;
this.cabeca = q;
}
else {
No p = this.cabeca;
for (int i=0; i<pos-1; i++) p = p.prox;
q.prox = p.prox;
p.prox = q;
}
}
public int elementos() {
int cont = 0;
No p = this.cabeca;
while (p != null) {
p = p.prox;
cont++;
}
return(cont);
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 16 / 33
Listas Ligadas
Excluindo Elemento em uma Posi¸c˜ao (3a
)
el1 el2 el3 el4cabe¸ca
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 17 / 33
Listas Ligadas
Excluindo Elemento em uma Posi¸c˜ao (3a
)
Marcamos o in´ıcio da lista
el1 el2 el3 el4cabe¸ca
p
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 17 / 33
Listas Ligadas
Excluindo Elemento em uma Posi¸c˜ao (3a
)
Marcamos o in´ıcio da lista
Movemos at´e o elemento anterior ao no
el1 el2 el3 el4cabe¸ca
p
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 17 / 33
Listas Ligadas
Excluindo Elemento em uma Posi¸c˜ao (3a
)
Marcamos o in´ıcio da lista
Movemos at´e o elemento anterior ao no
Fazemos o pr´oximo elemento de p ser o elemento
que est´a ap´os seu pr´oximo
el1 el2 el3 el4cabe¸ca
p
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 17 / 33
Listas Ligadas
Excluindo Elemento em uma Posi¸c˜ao (3a
)
E se a posi¸c˜ao pretendida for a primeira (0)?
el1 el2 el3 el4cabe¸ca
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 18 / 33
Listas Ligadas
Excluindo Elemento em uma Posi¸c˜ao (3a
)
E se a posi¸c˜ao pretendida for a primeira (0)?
Movemos a cabe¸ca
el1 el2 el3 el4
cabe¸ca
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 18 / 33
Listas Ligadas
Excluindo Elemento em uma Posi¸c˜ao (3a
)
E se a posi¸c˜ao pretendida for a primeira (0)?
Movemos a cabe¸ca
A lista fica
el1 el2 el3 el4
cabe¸ca
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 18 / 33
Listas Ligadas
Ent˜ao...
public boolean exclui(int i) {
if (i < 0 || i >= this.elementos() ||
this.cabeca == null) return(false);
if (i == 0) this.cabeca = this.cabeca.prox;
else {
No p = this.cabeca;
for (int j=0; j<(i-1); j++) {
p = p.prox;
}
p.prox = p.prox.prox;
}
return(true);
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 19 / 33
Listas Ligadas
Ent˜ao...
Inclu´ımos testes dos
parˆametros
public boolean exclui(int i) {
if (i < 0 || i >= this.elementos() ||
this.cabeca == null) return(false);
if (i == 0) this.cabeca = this.cabeca.prox;
else {
No p = this.cabeca;
for (int j=0; j<(i-1); j++) {
p = p.prox;
}
p.prox = p.prox.prox;
}
return(true);
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 19 / 33
Listas Ligadas
Modificamos
insere tamb´em,
incluindo os testes
dos parˆametros
public boolean insere(Residencia el, int pos)
{
if (pos < 0 || pos > this.elementos())
return(false);
No q = new No(el);
if (pos == 0) {
q.prox = this.cabeca;
this.cabeca = q;
}
else {
No p = this.cabeca;
for (int i=0; i<pos-1; i++) p = p.prox;
q.prox = p.prox;
p.prox = q;
}
return(true);
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 20 / 33
Listas Ligadas
Alternativamente `a
chamada constante
de elementos(),
poder´ıamos ter um
atributo elementos
na classe
ListaSimples, que
guardasse o n´umero
de elementos da lista
public boolean insere(Residencia el, int pos)
{
if (pos < 0 || pos > this.elementos())
return(false);
No q = new No(el);
if (pos == 0) {
q.prox = this.cabeca;
this.cabeca = q;
}
else {
No p = this.cabeca;
for (int i=0; i<pos-1; i++) p = p.prox;
q.prox = p.prox;
p.prox = q;
}
return(true);
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 21 / 33
Pilhas
Estruturas muito
usadas em computa¸c˜ao
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 22 / 33
Pilhas
Estruturas muito
usadas em computa¸c˜ao
Pense numa pilha de
livros
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 22 / 33
Pilhas
Estruturas muito
usadas em computa¸c˜ao
Pense numa pilha de
livros
Se queremos por mais um
livro na pilha, onde
colocamos?
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 22 / 33
Pilhas
Estruturas muito
usadas em computa¸c˜ao
Pense numa pilha de
livros
Se queremos por mais um
livro na pilha, onde
colocamos?
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 22 / 33
Pilhas
Estruturas muito
usadas em computa¸c˜ao
Pense numa pilha de
livros
Se queremos por mais um
livro na pilha, onde
colocamos?
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 22 / 33
Pilhas
Estruturas muito
usadas em computa¸c˜ao
Pense numa pilha de
livros
Se queremos por mais um
livro na pilha, onde
colocamos?
Se queremos tirar um
livro, de onde tiramos?
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 22 / 33
Pilhas
Estruturas muito
usadas em computa¸c˜ao
Pense numa pilha de
livros
Se queremos por mais um
livro na pilha, onde
colocamos?
Se queremos tirar um
livro, de onde tiramos?
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 22 / 33
Pilhas
Estruturas muito
usadas em computa¸c˜ao
Pense numa pilha de
livros
Se queremos por mais um
livro na pilha, onde
colocamos?
Se queremos tirar um
livro, de onde tiramos?
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 22 / 33
Pilhas
E como representamos
isso?
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 23 / 33
Pilhas
E como representamos
isso?
Dentre outras coisas, com
uma lista ligada:
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 23 / 33
Pilhas
E como representamos
isso?
Dentre outras coisas, com
uma lista ligada:
el3
el2
el1
topo
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 23 / 33
Pilhas
E como representamos
isso?
Dentre outras coisas, com
uma lista ligada:
el3
el2
el1
topo
el3 el2 el1
topo
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 23 / 33
Pilhas
E como representamos
isso?
Dentre outras coisas, com
uma lista ligada:
Empilhamentos e
Desempilhamentos s˜ao
feitos sempre na
posi¸c˜ao 0
el3
el2
el1
topo
el3 el2 el1
topo
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 23 / 33
Pilhas
E como representamos
isso?
Dentre outras coisas, com
uma lista ligada:
Empilhamentos e
Desempilhamentos s˜ao
feitos sempre na
posi¸c˜ao 0
O topo da pilha
el3
el2
el1
topo
el3 el2 el1
topo
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 23 / 33
Filas
Pilhas s˜ao do tipo LIFO (Last In First Out)
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 24 / 33
Filas
Pilhas s˜ao do tipo LIFO (Last In First Out)
O ´ultimo a entrar ´e o primeiro a sair
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 24 / 33
Filas
Pilhas s˜ao do tipo LIFO (Last In First Out)
O ´ultimo a entrar ´e o primeiro a sair
Uma estrutura alternativa `a pilha ´e a Fila
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 24 / 33
Filas
Pilhas s˜ao do tipo LIFO (Last In First Out)
O ´ultimo a entrar ´e o primeiro a sair
Uma estrutura alternativa `a pilha ´e a Fila
FIFO (First In First Out)
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 24 / 33
Filas
Pilhas s˜ao do tipo LIFO (Last In First Out)
O ´ultimo a entrar ´e o primeiro a sair
Uma estrutura alternativa `a pilha ´e a Fila
FIFO (First In First Out)
O primeiro item a entrar ´e o primeiro a sair
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 24 / 33
Filas
Pense numa fila de banco
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 25 / 33
Filas
Pense numa fila de banco
Se uma nova pessoa aparece, onde entra?
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 25 / 33
Filas
Pense numa fila de banco
Se uma nova pessoa aparece, onde entra?
Quem ser´a o primeiro a ser atendido?
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 25 / 33
Filas
Pense numa fila de banco
Se uma nova pessoa aparece, onde entra?
Quem ser´a o primeiro a ser atendido?
Se queremos retirar um elemento, retiramos da
frente; se queremos incluir, incluimos no final da fila
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 25 / 33
Filas
Pense numa fila de banco
Se uma nova pessoa aparece, onde entra?
Quem ser´a o primeiro a ser atendido?
Se queremos retirar um elemento, retiramos da
frente; se queremos incluir, incluimos no final da fila
Da mesma forma que em uma pilha, em uma fila
n˜ao podemos retirar um elemento do meio da fila,
ou l´a colocar um
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 25 / 33
Filas
Incluindo um Elemento
el1 el2 el3in´ıcio
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 26 / 33
Filas
Incluindo um Elemento
Criamos o elemento novo
el1 el2 el3in´ıcio
el4
q
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 26 / 33
Filas
Incluindo um Elemento
Criamos o elemento novo
Marcamos o in´ıcio da fila
el1 el2 el3in´ıcio
el4
q
p
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 26 / 33
Filas
Incluindo um Elemento
Corremos o ponteiro at´e o final da fila
el1 el2 el3in´ıcio
el4
q
p
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 27 / 33
Filas
Incluindo um Elemento
Corremos o ponteiro at´e o final da fila
Fazemos o elemento seguinte ao final da fila ser o
novo elemento
el1 el2 el3in´ıcio
el4
q
p
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 27 / 33
Filas
Incluindo um Elemento
E se a fila estiver inicialmente vazia?
in´ıcio
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 28 / 33
Filas
Incluindo um Elemento
E se a fila estiver inicialmente vazia?
Criamos o novo elemento
in´ıcio el1
q
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 28 / 33
Filas
Incluindo um Elemento
E se a fila estiver inicialmente vazia?
Criamos o novo elemento
E fazemos ele ser o in´ıcio da fila
in´ıcio el1
q
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 28 / 33
Filas
Excluindo um Elemento
E como exclu´ımos de uma fila?
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 29 / 33
Filas
Excluindo um Elemento
E como exclu´ımos de uma fila?
Do mesmo modo que em uma pilha
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 29 / 33
Listas Ligadas – Considera¸c˜oes Finais
Trabalhamos at´e agora
com acesso direto aos
atributos
public class No {
Residencia r;
No prox = null;
public No(Residencia r) {
this.r = r;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 30 / 33
Listas Ligadas – Considera¸c˜oes Finais
Trabalhamos at´e agora
com acesso direto aos
atributos
Podemos restringir esse
acesso, via getters e
setters
public class No {
Residencia r;
No prox = null;
public No(Residencia r) {
this.r = r;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 30 / 33
Listas Ligadas – Considera¸c˜oes Finais
Trabalhamos at´e agora
com acesso direto aos
atributos
Podemos restringir esse
acesso, via getters e
setters
Tornamos os atributos
private, com m´etodos
de acesso public
public class No {
private Residencia r;
private No prox = null;
public No(Residencia r) {
this.r = r;
}
public Residencia getRes() {
return(this.r);
}
public No getProx() {
return(this.prox);
}
public void setRes(Residencia r) {
this.r = r;
}
public void setProx(No prox) {
this.prox = prox;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 30 / 33
Listas Ligadas – Considera¸c˜oes Finais
Boa pr´atica de
programa¸c˜ao
public class No {
private Residencia r;
private No prox = null;
public No(Residencia r) {
this.r = r;
}
public Residencia getRes() {
return(this.r);
}
public No getProx() {
return(this.prox);
}
public void setRes(Residencia r) {
this.r = r;
}
public void setProx(No prox) {
this.prox = prox;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 31 / 33
Listas Ligadas – Considera¸c˜oes Finais
Boa pr´atica de
programa¸c˜ao
Nos permite dar acesso
apenas para leitura, por
exemplo
public class No {
private Residencia r;
private No prox = null;
public No(Residencia r) {
this.r = r;
}
public Residencia getRes() {
return(this.r);
}
public No getProx() {
return(this.prox);
}
public void setRes(Residencia r) {
this.r = r;
}
public void setProx(No prox) {
this.prox = prox;
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 31 / 33
Listas Ligadas – Considera¸c˜oes Finais
Boa pr´atica de
programa¸c˜ao
Nos permite dar acesso
apenas para leitura, por
exemplo
Removendo setRes e
setProx
public class No {
private Residencia r;
private No prox = null;
public No(Residencia r) {
this.r = r;
}
public Residencia getRes() {
return(this.r);
}
public No getProx() {
return(this.prox);
}
}
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 31 / 33
QUE SACANAGEM!!!
Java j´a faz tudo pra vocˆe!
LinkedList (duplamente ligada): https://docs.oracle.
com/javase/9/docs/api/java/util/LinkedList.html
Vector (arranjo de tamanho vari´avel):
https://docs.oracle.com/javase/9/docs/api/java/
util/Vector.html
Stack (de Vector): https://docs.oracle.com/javase/9/
docs/api/java/util/Stack.html
Queue (interface – mais adiante veremos): https://docs.
oracle.com/javase/9/docs/api/java/util/Queue.html
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 32 / 33
Videoaula
N˜ao h´a.
Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 33 / 33

Mais conteúdo relacionado

Mais de Norton Trevisan Roman

(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 03
(ACH2044) Inteligência Artificial - Aula 03(ACH2044) Inteligência Artificial - Aula 03
(ACH2044) Inteligência Artificial - Aula 03Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 02
(ACH2044) Inteligência Artificial - Aula 02(ACH2044) Inteligência Artificial - Aula 02
(ACH2044) Inteligência Artificial - Aula 02Norton Trevisan Roman
 

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 
(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04
 
(ACH2044) Inteligência Artificial - Aula 03
(ACH2044) Inteligência Artificial - Aula 03(ACH2044) Inteligência Artificial - Aula 03
(ACH2044) Inteligência Artificial - Aula 03
 
(ACH2044) Inteligência Artificial - Aula 02
(ACH2044) Inteligência Artificial - Aula 02(ACH2044) Inteligência Artificial - Aula 02
(ACH2044) Inteligência Artificial - Aula 02
 

Último

LENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretaçãoLENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretaçãoLidianePaulaValezi
 
3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptxMarlene Cunhada
 
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubelaprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubeladrianaguedesbatista
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...andreiavys
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticash5kpmr7w7
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...PatriciaCaetano18
 
Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Centro Jacques Delors
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfcomercial400681
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do séculoBiblioteca UCS
 
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfatividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfAutonoma
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxTailsonSantos1
 
Falando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdFalando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdLeonardoDeOliveiraLu2
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxMarcosLemes28
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptxJssicaCassiano2
 
Educação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxEducação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxMarcosLemes28
 
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...AnaAugustaLagesZuqui
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Centro Jacques Delors
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Cabiamar
 
M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxJustinoTeixeira1
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa paraAndreaPassosMascaren
 

Último (20)

LENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretaçãoLENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretação
 
3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx
 
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubelaprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubel
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do século
 
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfatividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
Falando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdFalando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introd
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
Educação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxEducação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptx
 
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024
 
M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptx
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa para
 

(ACH2001) Introdução à Programação - Aula 21

  • 1. Aula 21 – Listas Ligadas Norton Trevisan Roman 12 de maio de 2020 Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 1 / 33
  • 2. Listas Ligadas Considere nosso condom´ınio class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Projeto p = new Projeto(2); p.adicionaRes(r1); p.adicionaRes(r2); } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 2 / 33
  • 3. Listas Ligadas Considere nosso condom´ınio E se, durante a execu¸c˜ao, precis´assemos alocar mais uma casa (al´em dos limites do condom´ınio)? class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Projeto p = new Projeto(2); p.adicionaRes(r1); p.adicionaRes(r2); } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 2 / 33
  • 4. Listas Ligadas Considere nosso condom´ınio E se, durante a execu¸c˜ao, precis´assemos alocar mais uma casa (al´em dos limites do condom´ınio)? class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Projeto p = new Projeto(2); p.adicionaRes(r1); p.adicionaRes(r2); Residencia r3 = new Residencia(cq2, null); } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 2 / 33
  • 5. Listas Ligadas Considere nosso condom´ınio E se, durante a execu¸c˜ao, precis´assemos alocar mais uma casa (al´em dos limites do condom´ınio)? N˜ao haver´a espa¸co alocado para ela no arranjo class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Projeto p = new Projeto(2); p.adicionaRes(r1); p.adicionaRes(r2); Residencia r3 = new Residencia(cq2, null); } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 2 / 33
  • 6. Listas Ligadas Que fazer? class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Projeto p = new Projeto(2); p.adicionaRes(r1); p.adicionaRes(r2); Residencia r3 = new Residencia(cq2, null); } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
  • 7. Listas Ligadas Que fazer? Alocar um novo arranjo maior class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Projeto p = new Projeto(2); p.adicionaRes(r1); p.adicionaRes(r2); Residencia r3 = new Residencia(cq2, null); } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
  • 8. Listas Ligadas Que fazer? Alocar um novo arranjo maior class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Projeto p = new Projeto(2); p.adicionaRes(r1); p.adicionaRes(r2); Residencia r3 = new Residencia(cq2, null); Residencia[] maior = new Residencia[3]; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
  • 9. Listas Ligadas Que fazer? Alocar um novo arranjo maior Copiar o conte´udo do velho nesse class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Projeto p = new Projeto(2); p.adicionaRes(r1); p.adicionaRes(r2); Residencia r3 = new Residencia(cq2, null); Residencia[] maior = new Residencia[3]; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
  • 10. Listas Ligadas Que fazer? Alocar um novo arranjo maior Copiar o conte´udo do velho nesse class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Projeto p = new Projeto(2); p.adicionaRes(r1); p.adicionaRes(r2); Residencia r3 = new Residencia(cq2, null); Residencia[] maior = new Residencia[3]; maior[0] = p.condominio[0]; maior[1] = p.condominio[1]; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
  • 11. Listas Ligadas Que fazer? Alocar um novo arranjo maior Copiar o conte´udo do velho nesse Incluir a nova casa class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Projeto p = new Projeto(2); p.adicionaRes(r1); p.adicionaRes(r2); Residencia r3 = new Residencia(cq2, null); Residencia[] maior = new Residencia[3]; maior[0] = p.condominio[0]; maior[1] = p.condominio[1]; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
  • 12. Listas Ligadas Que fazer? Alocar um novo arranjo maior Copiar o conte´udo do velho nesse Incluir a nova casa class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Projeto p = new Projeto(2); p.adicionaRes(r1); p.adicionaRes(r2); Residencia r3 = new Residencia(cq2, null); Residencia[] maior = new Residencia[3]; maior[0] = p.condominio[0]; maior[1] = p.condominio[1]; maior[2] = r3; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
  • 13. Listas Ligadas Que fazer? Alocar um novo arranjo maior Copiar o conte´udo do velho nesse Incluir a nova casa Substituir o arranjo antigo pelo maior class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Projeto p = new Projeto(2); p.adicionaRes(r1); p.adicionaRes(r2); Residencia r3 = new Residencia(cq2, null); Residencia[] maior = new Residencia[3]; maior[0] = p.condominio[0]; maior[1] = p.condominio[1]; maior[2] = r3; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
  • 14. Listas Ligadas Que fazer? Alocar um novo arranjo maior Copiar o conte´udo do velho nesse Incluir a nova casa Substituir o arranjo antigo pelo maior class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Projeto p = new Projeto(2); p.adicionaRes(r1); p.adicionaRes(r2); Residencia r3 = new Residencia(cq2, null); Residencia[] maior = new Residencia[3]; maior[0] = p.condominio[0]; maior[1] = p.condominio[1]; maior[2] = r3; p.condominio = maior; p.ultimo++; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
  • 15. Listas Ligadas Que fazer? Alocar um novo arranjo maior Copiar o conte´udo do velho nesse Incluir a nova casa Substituir o arranjo antigo pelo maior Incrivelmente ineficiente class Projeto { ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Projeto p = new Projeto(2); p.adicionaRes(r1); p.adicionaRes(r2); Residencia r3 = new Residencia(cq2, null); Residencia[] maior = new Residencia[3]; maior[0] = p.condominio[0]; maior[1] = p.condominio[1]; maior[2] = r3; p.condominio = maior; p.ultimo++; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 3 / 33
  • 16. Listas Ligadas Deveria haver um modo de simplesmente aumentarmos o arranjo Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 4 / 33
  • 17. Listas Ligadas Deveria haver um modo de simplesmente aumentarmos o arranjo Com arranjos... n˜ao Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 4 / 33
  • 18. Listas Ligadas Deveria haver um modo de simplesmente aumentarmos o arranjo Com arranjos... n˜ao Alternativa: Lista Ligada Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 4 / 33
  • 19. Listas Ligadas Deveria haver um modo de simplesmente aumentarmos o arranjo Com arranjos... n˜ao Alternativa: Lista Ligada Uma lista ligada ´e uma lista onde cada elemento – chamado de n´o – cont´em um valor e uma referˆencia para o elemento seguinte na lista Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 4 / 33
  • 20. Listas Ligadas Deveria haver um modo de simplesmente aumentarmos o arranjo Com arranjos... n˜ao Alternativa: Lista Ligada Uma lista ligada ´e uma lista onde cada elemento – chamado de n´o – cont´em um valor e uma referˆencia para o elemento seguinte na lista Assim, sabendo onde est´a o primeiro elemento da lista, podemos chegar a qualquer outro elemento Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 4 / 33
  • 21. Listas Ligadas Simples: el1 el2 . . . eln Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 5 / 33
  • 22. Listas Ligadas Simples: el1 el2 . . . eln Circular: el1 el2 . . . eln Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 5 / 33
  • 23. Listas Ligadas Simples: el1 el2 . . . eln Circular: el1 el2 . . . eln Duplamente ligada: el1 el2 . . . eln Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 5 / 33
  • 24. Listas Ligadas Simples: el1 el2 . . . eln Circular: el1 el2 . . . eln Duplamente ligada: el1 el2 . . . eln Etc Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 5 / 33
  • 25. Listas Ligadas Dado armazenado: Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 6 / 33
  • 26. Listas Ligadas Dado armazenado: (Endere¸co de) objeto Residencia Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 6 / 33
  • 27. Listas Ligadas Dado armazenado: (Endere¸co de) objeto Residencia Criando o n´o: public class No { Residencia r; No prox = null; public No(Residencia r) { this.r = r; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 6 / 33
  • 28. Listas Ligadas Dado armazenado: (Endere¸co de) objeto Residencia Criando o n´o: Temos o dado armazenado public class No { Residencia r; No prox = null; public No(Residencia r) { this.r = r; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 6 / 33
  • 29. Listas Ligadas Dado armazenado: (Endere¸co de) objeto Residencia Criando o n´o: Temos o dado armazenado E uma referˆencia para o pr´oximo elemento public class No { Residencia r; No prox = null; public No(Residencia r) { this.r = r; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 6 / 33
  • 30. Listas Ligadas Criando uma lista simples: public class No { Residencia r; No prox = null; public No(Residencia r) { this.r = r; } } public class ListaSimples { No cabeca; public ListaSimples() { this.cabeca = null; } public void insere(Residencia el) { No aux = new No(el); aux.prox = this.cabeca; this.cabeca = aux; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 7 / 33
  • 31. Listas Ligadas Criando uma lista simples: cabe¸ca public class No { Residencia r; No prox = null; public No(Residencia r) { this.r = r; } } public class ListaSimples { No cabeca; public ListaSimples() { this.cabeca = null; } public void insere(Residencia el) { No aux = new No(el); aux.prox = this.cabeca; this.cabeca = aux; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 7 / 33
  • 32. Listas Ligadas Inserindo elemento no in´ıcio: cabe¸ca public class No { Residencia r; No prox = null; public No(Residencia r) { this.r = r; } } public class ListaSimples { No cabeca; public ListaSimples() { this.cabeca = null; } public void insere(Residencia el) { No aux = new No(el); aux.prox = this.cabeca; this.cabeca = aux; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 8 / 33
  • 33. Listas Ligadas Inserindo elemento no in´ıcio: Crie o novo elemento a ser inserido cabe¸cael aux public class No { Residencia r; No prox = null; public No(Residencia r) { this.r = r; } } public class ListaSimples { No cabeca; public ListaSimples() { this.cabeca = null; } public void insere(Residencia el) { No aux = new No(el); aux.prox = this.cabeca; this.cabeca = aux; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 8 / 33
  • 34. Listas Ligadas Inserindo elemento no in´ıcio: Crie o novo elemento a ser inserido Fa¸ca o elemento do in´ıcio da lista ser seu pr´oximo cabe¸ca el aux public class No { Residencia r; No prox = null; public No(Residencia r) { this.r = r; } } public class ListaSimples { No cabeca; public ListaSimples() { this.cabeca = null; } public void insere(Residencia el) { No aux = new No(el); aux.prox = this.cabeca; this.cabeca = aux; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 8 / 33
  • 35. Listas Ligadas Inserindo elemento no in´ıcio: Crie o novo elemento a ser inserido Fa¸ca o elemento do in´ıcio da lista ser seu pr´oximo Torne esse novo elemento o novo in´ıcio da lista cabe¸ca el aux public class No { Residencia r; No prox = null; public No(Residencia r) { this.r = r; } } public class ListaSimples { No cabeca; public ListaSimples() { this.cabeca = null; } public void insere(Residencia el) { No aux = new No(el); aux.prox = this.cabeca; this.cabeca = aux; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 8 / 33
  • 36. Listas Ligadas E se a lista j´a tiver algo? el2 el1 cabe¸ca public class No { Residencia r; No prox = null; public No(Residencia r) { this.r = r; } } public class ListaSimples { No cabeca; public ListaSimples() { this.cabeca = null; } public void insere(Residencia el) { No aux = new No(el); aux.prox = this.cabeca; this.cabeca = aux; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 9 / 33
  • 37. Listas Ligadas E se a lista j´a tiver algo? el2 el1 cabe¸ca el aux public class No { Residencia r; No prox = null; public No(Residencia r) { this.r = r; } } public class ListaSimples { No cabeca; public ListaSimples() { this.cabeca = null; } public void insere(Residencia el) { No aux = new No(el); aux.prox = this.cabeca; this.cabeca = aux; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 9 / 33
  • 38. Listas Ligadas E se a lista j´a tiver algo? el2 el1 cabe¸ca el aux public class No { Residencia r; No prox = null; public No(Residencia r) { this.r = r; } } public class ListaSimples { No cabeca; public ListaSimples() { this.cabeca = null; } public void insere(Residencia el) { No aux = new No(el); aux.prox = this.cabeca; this.cabeca = aux; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 9 / 33
  • 39. Listas Ligadas E se a lista j´a tiver algo? el2 el1 cabe¸ca el aux public class No { Residencia r; No prox = null; public No(Residencia r) { this.r = r; } } public class ListaSimples { No cabeca; public ListaSimples() { this.cabeca = null; } public void insere(Residencia el) { No aux = new No(el); aux.prox = this.cabeca; this.cabeca = aux; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 9 / 33
  • 40. Listas Ligadas E como podemos usar isso? Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 10 / 33
  • 41. Listas Ligadas E como podemos usar isso? public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr,null); Residencia r2 = new Residencia(cq,null); Residencia r3 = new Residencia(cq2,null); ListaSimples l = new ListaSimples(); l.insere(r1); l.insere(r2); l.insere(r3); No n = l.cabeca; while (n != null) { System.out.println(n.r.casa.area()); n = n.prox; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 10 / 33
  • 42. Listas Ligadas E como podemos usar isso? Repare! public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr,null); Residencia r2 = new Residencia(cq,null); Residencia r3 = new Residencia(cq2,null); ListaSimples l = new ListaSimples(); l.insere(r1); l.insere(r2); l.insere(r3); No n = l.cabeca; while (n != null) { System.out.println(n.r.casa.area()); n = n.prox; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 10 / 33
  • 43. Listas Ligadas E como podemos usar isso? Repare! N˜ao precisamos de vari´avel auxiliar para guardar o resultado de um m´etodo public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr,null); Residencia r2 = new Residencia(cq,null); Residencia r3 = new Residencia(cq2,null); ListaSimples l = new ListaSimples(); l.insere(r1); l.insere(r2); l.insere(r3); No n = l.cabeca; while (n != null) { System.out.println(n.r.casa.area()); n = n.prox; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 10 / 33
  • 44. Listas Ligadas E como podemos usar isso? Repare! N˜ao precisamos de vari´avel auxiliar para guardar o resultado de um m´etodo O computador ir´a buscar o atributo r, de n public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr,null); Residencia r2 = new Residencia(cq,null); Residencia r3 = new Residencia(cq2,null); ListaSimples l = new ListaSimples(); l.insere(r1); l.insere(r2); l.insere(r3); No n = l.cabeca; while (n != null) { System.out.println(n.r.casa.area()); n = n.prox; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 10 / 33
  • 45. Listas Ligadas E como podemos usar isso? Repare! N˜ao precisamos de vari´avel auxiliar para guardar o resultado de um m´etodo O computador ir´a buscar o atributo r, de n Ent˜ao olhar´a o atributo casa, de r public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr,null); Residencia r2 = new Residencia(cq,null); Residencia r3 = new Residencia(cq2,null); ListaSimples l = new ListaSimples(); l.insere(r1); l.insere(r2); l.insere(r3); No n = l.cabeca; while (n != null) { System.out.println(n.r.casa.area()); n = n.prox; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 10 / 33
  • 46. Listas Ligadas Repare! Finalmente, chamar´a o m´etodo area() desse atributo. public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr,null); Residencia r2 = new Residencia(cq,null); Residencia r3 = new Residencia(cq2,null); ListaSimples l = new ListaSimples(); l.insere(r1); l.insere(r2); l.insere(r3); No n = l.cabeca; while (n != null) { System.out.println(n.r.casa.area()); n = n.prox; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 11 / 33
  • 47. Listas Ligadas Repare! Finalmente, chamar´a o m´etodo area() desse atributo. Sa´ıda $ java Projeto 64.0 100.0 150.0 public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr,null); Residencia r2 = new Residencia(cq,null); Residencia r3 = new Residencia(cq2,null); ListaSimples l = new ListaSimples(); l.insere(r1); l.insere(r2); l.insere(r3); No n = l.cabeca; while (n != null) { System.out.println(n.r.casa.area()); n = n.prox; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 11 / 33
  • 48. Listas Ligadas Repare! Finalmente, chamar´a o m´etodo area() desse atributo. Sa´ıda $ java Projeto 64.0 100.0 150.0 (Note que a ordem est´a inversa `a de inser¸c˜ao) public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr,null); Residencia r2 = new Residencia(cq,null); Residencia r3 = new Residencia(cq2,null); ListaSimples l = new ListaSimples(); l.insere(r1); l.insere(r2); l.insere(r3); No n = l.cabeca; while (n != null) { System.out.println(n.r.casa.area()); n = n.prox; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 11 / 33
  • 49. Listas Ligadas – Mudando Projeto class Projeto { Residencia[] condominio; int ultimo = -1; boolean adicionaRes(Residencia r) { if (this.ultimo < this.condominio.length-1) { ultimo++; this.condominio[ultimo] = r; return(true); } return(false); } Projeto(int tam) { this.condominio = new Residencia[tam]; } public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Residencia r3 = new Residencia(cq2, null); Projeto p = new Projeto(3); p.adicionaRes(r1); p.adicionaRes(r2); p.adicionaRes(r3); } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 12 / 33
  • 50. Listas Ligadas – Mudando Projeto class Projeto { Residencia[] condominio; int ultimo = -1; boolean adicionaRes(Residencia r) { if (this.ultimo < this.condominio.length-1) { ultimo++; this.condominio[ultimo] = r; return(true); } return(false); } Projeto(int tam) { this.condominio = new Residencia[tam]; } public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Residencia r3 = new Residencia(cq2, null); Projeto p = new Projeto(3); p.adicionaRes(r1); p.adicionaRes(r2); p.adicionaRes(r3); } } class Projeto { ListaSimples condominio; void adicionaRes(Residencia r) { this.condominio.insere(r); } Projeto() { this.condominio = new ListaSimples(); } public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); CasaQuad cq2 = new CasaQuad(8,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); Residencia r3 = new Residencia(cq2, null); Projeto p = new Projeto(); p.adicionaRes(r1); p.adicionaRes(r2); p.adicionaRes(r3); } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 12 / 33
  • 51. Listas Ligadas Incluindo Elemento em uma Posi¸c˜ao (4a ) el1 el2 el3 el4cabe¸ca Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 13 / 33
  • 52. Listas Ligadas Incluindo Elemento em uma Posi¸c˜ao (4a ) Alocamos espa¸co para o novo elemento el1 el2 el3 el4cabe¸ca el5 q Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 13 / 33
  • 53. Listas Ligadas Incluindo Elemento em uma Posi¸c˜ao (4a ) Alocamos espa¸co para o novo elemento Marcamos o in´ıcio da lista el1 el2 el3 el4cabe¸ca el5 q p Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 13 / 33
  • 54. Listas Ligadas Incluindo Elemento em uma Posi¸c˜ao (4a ) Alocamos espa¸co para o novo elemento Marcamos o in´ıcio da lista Andamos at´e a (n-1)a posi¸c˜ao: el1 el2 el3 el4cabe¸ca el5 q p Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 13 / 33
  • 55. Listas Ligadas Incluindo Elemento em uma Posi¸c˜ao (4a ) Fazemos o campo prox do novo elemento apontar para o no elemento da lista el1 el2 el3 el4cabe¸ca el5 q p Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 14 / 33
  • 56. Listas Ligadas Incluindo Elemento em uma Posi¸c˜ao (4a ) Fazemos o campo prox do novo elemento apontar para o no elemento da lista Fazemos o elemento seguinte ao (n-1)o ser o novo elemento el1 el2 el3 el4cabe¸ca el5 q p Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 14 / 33
  • 57. Listas Ligadas Isso contudo funciona para posi¸c˜oes > 0 Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 15 / 33
  • 58. Listas Ligadas Isso contudo funciona para posi¸c˜oes > 0 E se for na posi¸c˜ao 0? Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 15 / 33
  • 59. Listas Ligadas Isso contudo funciona para posi¸c˜oes > 0 E se for na posi¸c˜ao 0? J´a vimos inser¸c˜ao na primeira posi¸c˜ao Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 15 / 33
  • 60. Listas Ligadas Isso contudo funciona para posi¸c˜oes > 0 E se for na posi¸c˜ao 0? J´a vimos inser¸c˜ao na primeira posi¸c˜ao Ent˜ao... public void insere(Residencia el, int pos) { No q = new No(el); if (pos == 0) { q.prox = this.cabeca; this.cabeca = q; } else { No p = this.cabeca; for (int i=0; i<pos-1; i++) p = p.prox; q.prox = p.prox; p.prox = q; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 15 / 33
  • 61. Listas Ligadas Naturalmente, falta ainda verificar se n˜ao tentamos colocar um elemento ap´os o ´ultimo. public void insere(Residencia el, int pos) { No q = new No(el); if (pos == 0) { q.prox = this.cabeca; this.cabeca = q; } else { No p = this.cabeca; for (int i=0; i<pos-1; i++) p = p.prox; q.prox = p.prox; p.prox = q; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 16 / 33
  • 62. Listas Ligadas Naturalmente, falta ainda verificar se n˜ao tentamos colocar um elemento ap´os o ´ultimo. Para isso, podemos criar um m´etodo que retorne o n´umero de elementos da lista: public void insere(Residencia el, int pos) { No q = new No(el); if (pos == 0) { q.prox = this.cabeca; this.cabeca = q; } else { No p = this.cabeca; for (int i=0; i<pos-1; i++) p = p.prox; q.prox = p.prox; p.prox = q; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 16 / 33
  • 63. Listas Ligadas Naturalmente, falta ainda verificar se n˜ao tentamos colocar um elemento ap´os o ´ultimo. Para isso, podemos criar um m´etodo que retorne o n´umero de elementos da lista: public void insere(Residencia el, int pos) { No q = new No(el); if (pos == 0) { q.prox = this.cabeca; this.cabeca = q; } else { No p = this.cabeca; for (int i=0; i<pos-1; i++) p = p.prox; q.prox = p.prox; p.prox = q; } } public int elementos() { int cont = 0; No p = this.cabeca; while (p != null) { p = p.prox; cont++; } return(cont); } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 16 / 33
  • 64. Listas Ligadas Excluindo Elemento em uma Posi¸c˜ao (3a ) el1 el2 el3 el4cabe¸ca Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 17 / 33
  • 65. Listas Ligadas Excluindo Elemento em uma Posi¸c˜ao (3a ) Marcamos o in´ıcio da lista el1 el2 el3 el4cabe¸ca p Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 17 / 33
  • 66. Listas Ligadas Excluindo Elemento em uma Posi¸c˜ao (3a ) Marcamos o in´ıcio da lista Movemos at´e o elemento anterior ao no el1 el2 el3 el4cabe¸ca p Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 17 / 33
  • 67. Listas Ligadas Excluindo Elemento em uma Posi¸c˜ao (3a ) Marcamos o in´ıcio da lista Movemos at´e o elemento anterior ao no Fazemos o pr´oximo elemento de p ser o elemento que est´a ap´os seu pr´oximo el1 el2 el3 el4cabe¸ca p Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 17 / 33
  • 68. Listas Ligadas Excluindo Elemento em uma Posi¸c˜ao (3a ) E se a posi¸c˜ao pretendida for a primeira (0)? el1 el2 el3 el4cabe¸ca Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 18 / 33
  • 69. Listas Ligadas Excluindo Elemento em uma Posi¸c˜ao (3a ) E se a posi¸c˜ao pretendida for a primeira (0)? Movemos a cabe¸ca el1 el2 el3 el4 cabe¸ca Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 18 / 33
  • 70. Listas Ligadas Excluindo Elemento em uma Posi¸c˜ao (3a ) E se a posi¸c˜ao pretendida for a primeira (0)? Movemos a cabe¸ca A lista fica el1 el2 el3 el4 cabe¸ca Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 18 / 33
  • 71. Listas Ligadas Ent˜ao... public boolean exclui(int i) { if (i < 0 || i >= this.elementos() || this.cabeca == null) return(false); if (i == 0) this.cabeca = this.cabeca.prox; else { No p = this.cabeca; for (int j=0; j<(i-1); j++) { p = p.prox; } p.prox = p.prox.prox; } return(true); } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 19 / 33
  • 72. Listas Ligadas Ent˜ao... Inclu´ımos testes dos parˆametros public boolean exclui(int i) { if (i < 0 || i >= this.elementos() || this.cabeca == null) return(false); if (i == 0) this.cabeca = this.cabeca.prox; else { No p = this.cabeca; for (int j=0; j<(i-1); j++) { p = p.prox; } p.prox = p.prox.prox; } return(true); } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 19 / 33
  • 73. Listas Ligadas Modificamos insere tamb´em, incluindo os testes dos parˆametros public boolean insere(Residencia el, int pos) { if (pos < 0 || pos > this.elementos()) return(false); No q = new No(el); if (pos == 0) { q.prox = this.cabeca; this.cabeca = q; } else { No p = this.cabeca; for (int i=0; i<pos-1; i++) p = p.prox; q.prox = p.prox; p.prox = q; } return(true); } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 20 / 33
  • 74. Listas Ligadas Alternativamente `a chamada constante de elementos(), poder´ıamos ter um atributo elementos na classe ListaSimples, que guardasse o n´umero de elementos da lista public boolean insere(Residencia el, int pos) { if (pos < 0 || pos > this.elementos()) return(false); No q = new No(el); if (pos == 0) { q.prox = this.cabeca; this.cabeca = q; } else { No p = this.cabeca; for (int i=0; i<pos-1; i++) p = p.prox; q.prox = p.prox; p.prox = q; } return(true); } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 21 / 33
  • 75. Pilhas Estruturas muito usadas em computa¸c˜ao Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 22 / 33
  • 76. Pilhas Estruturas muito usadas em computa¸c˜ao Pense numa pilha de livros Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 22 / 33
  • 77. Pilhas Estruturas muito usadas em computa¸c˜ao Pense numa pilha de livros Se queremos por mais um livro na pilha, onde colocamos? Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 22 / 33
  • 78. Pilhas Estruturas muito usadas em computa¸c˜ao Pense numa pilha de livros Se queremos por mais um livro na pilha, onde colocamos? Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 22 / 33
  • 79. Pilhas Estruturas muito usadas em computa¸c˜ao Pense numa pilha de livros Se queremos por mais um livro na pilha, onde colocamos? Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 22 / 33
  • 80. Pilhas Estruturas muito usadas em computa¸c˜ao Pense numa pilha de livros Se queremos por mais um livro na pilha, onde colocamos? Se queremos tirar um livro, de onde tiramos? Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 22 / 33
  • 81. Pilhas Estruturas muito usadas em computa¸c˜ao Pense numa pilha de livros Se queremos por mais um livro na pilha, onde colocamos? Se queremos tirar um livro, de onde tiramos? Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 22 / 33
  • 82. Pilhas Estruturas muito usadas em computa¸c˜ao Pense numa pilha de livros Se queremos por mais um livro na pilha, onde colocamos? Se queremos tirar um livro, de onde tiramos? Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 22 / 33
  • 83. Pilhas E como representamos isso? Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 23 / 33
  • 84. Pilhas E como representamos isso? Dentre outras coisas, com uma lista ligada: Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 23 / 33
  • 85. Pilhas E como representamos isso? Dentre outras coisas, com uma lista ligada: el3 el2 el1 topo Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 23 / 33
  • 86. Pilhas E como representamos isso? Dentre outras coisas, com uma lista ligada: el3 el2 el1 topo el3 el2 el1 topo Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 23 / 33
  • 87. Pilhas E como representamos isso? Dentre outras coisas, com uma lista ligada: Empilhamentos e Desempilhamentos s˜ao feitos sempre na posi¸c˜ao 0 el3 el2 el1 topo el3 el2 el1 topo Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 23 / 33
  • 88. Pilhas E como representamos isso? Dentre outras coisas, com uma lista ligada: Empilhamentos e Desempilhamentos s˜ao feitos sempre na posi¸c˜ao 0 O topo da pilha el3 el2 el1 topo el3 el2 el1 topo Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 23 / 33
  • 89. Filas Pilhas s˜ao do tipo LIFO (Last In First Out) Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 24 / 33
  • 90. Filas Pilhas s˜ao do tipo LIFO (Last In First Out) O ´ultimo a entrar ´e o primeiro a sair Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 24 / 33
  • 91. Filas Pilhas s˜ao do tipo LIFO (Last In First Out) O ´ultimo a entrar ´e o primeiro a sair Uma estrutura alternativa `a pilha ´e a Fila Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 24 / 33
  • 92. Filas Pilhas s˜ao do tipo LIFO (Last In First Out) O ´ultimo a entrar ´e o primeiro a sair Uma estrutura alternativa `a pilha ´e a Fila FIFO (First In First Out) Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 24 / 33
  • 93. Filas Pilhas s˜ao do tipo LIFO (Last In First Out) O ´ultimo a entrar ´e o primeiro a sair Uma estrutura alternativa `a pilha ´e a Fila FIFO (First In First Out) O primeiro item a entrar ´e o primeiro a sair Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 24 / 33
  • 94. Filas Pense numa fila de banco Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 25 / 33
  • 95. Filas Pense numa fila de banco Se uma nova pessoa aparece, onde entra? Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 25 / 33
  • 96. Filas Pense numa fila de banco Se uma nova pessoa aparece, onde entra? Quem ser´a o primeiro a ser atendido? Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 25 / 33
  • 97. Filas Pense numa fila de banco Se uma nova pessoa aparece, onde entra? Quem ser´a o primeiro a ser atendido? Se queremos retirar um elemento, retiramos da frente; se queremos incluir, incluimos no final da fila Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 25 / 33
  • 98. Filas Pense numa fila de banco Se uma nova pessoa aparece, onde entra? Quem ser´a o primeiro a ser atendido? Se queremos retirar um elemento, retiramos da frente; se queremos incluir, incluimos no final da fila Da mesma forma que em uma pilha, em uma fila n˜ao podemos retirar um elemento do meio da fila, ou l´a colocar um Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 25 / 33
  • 99. Filas Incluindo um Elemento el1 el2 el3in´ıcio Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 26 / 33
  • 100. Filas Incluindo um Elemento Criamos o elemento novo el1 el2 el3in´ıcio el4 q Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 26 / 33
  • 101. Filas Incluindo um Elemento Criamos o elemento novo Marcamos o in´ıcio da fila el1 el2 el3in´ıcio el4 q p Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 26 / 33
  • 102. Filas Incluindo um Elemento Corremos o ponteiro at´e o final da fila el1 el2 el3in´ıcio el4 q p Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 27 / 33
  • 103. Filas Incluindo um Elemento Corremos o ponteiro at´e o final da fila Fazemos o elemento seguinte ao final da fila ser o novo elemento el1 el2 el3in´ıcio el4 q p Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 27 / 33
  • 104. Filas Incluindo um Elemento E se a fila estiver inicialmente vazia? in´ıcio Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 28 / 33
  • 105. Filas Incluindo um Elemento E se a fila estiver inicialmente vazia? Criamos o novo elemento in´ıcio el1 q Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 28 / 33
  • 106. Filas Incluindo um Elemento E se a fila estiver inicialmente vazia? Criamos o novo elemento E fazemos ele ser o in´ıcio da fila in´ıcio el1 q Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 28 / 33
  • 107. Filas Excluindo um Elemento E como exclu´ımos de uma fila? Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 29 / 33
  • 108. Filas Excluindo um Elemento E como exclu´ımos de uma fila? Do mesmo modo que em uma pilha Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 29 / 33
  • 109. Listas Ligadas – Considera¸c˜oes Finais Trabalhamos at´e agora com acesso direto aos atributos public class No { Residencia r; No prox = null; public No(Residencia r) { this.r = r; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 30 / 33
  • 110. Listas Ligadas – Considera¸c˜oes Finais Trabalhamos at´e agora com acesso direto aos atributos Podemos restringir esse acesso, via getters e setters public class No { Residencia r; No prox = null; public No(Residencia r) { this.r = r; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 30 / 33
  • 111. Listas Ligadas – Considera¸c˜oes Finais Trabalhamos at´e agora com acesso direto aos atributos Podemos restringir esse acesso, via getters e setters Tornamos os atributos private, com m´etodos de acesso public public class No { private Residencia r; private No prox = null; public No(Residencia r) { this.r = r; } public Residencia getRes() { return(this.r); } public No getProx() { return(this.prox); } public void setRes(Residencia r) { this.r = r; } public void setProx(No prox) { this.prox = prox; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 30 / 33
  • 112. Listas Ligadas – Considera¸c˜oes Finais Boa pr´atica de programa¸c˜ao public class No { private Residencia r; private No prox = null; public No(Residencia r) { this.r = r; } public Residencia getRes() { return(this.r); } public No getProx() { return(this.prox); } public void setRes(Residencia r) { this.r = r; } public void setProx(No prox) { this.prox = prox; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 31 / 33
  • 113. Listas Ligadas – Considera¸c˜oes Finais Boa pr´atica de programa¸c˜ao Nos permite dar acesso apenas para leitura, por exemplo public class No { private Residencia r; private No prox = null; public No(Residencia r) { this.r = r; } public Residencia getRes() { return(this.r); } public No getProx() { return(this.prox); } public void setRes(Residencia r) { this.r = r; } public void setProx(No prox) { this.prox = prox; } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 31 / 33
  • 114. Listas Ligadas – Considera¸c˜oes Finais Boa pr´atica de programa¸c˜ao Nos permite dar acesso apenas para leitura, por exemplo Removendo setRes e setProx public class No { private Residencia r; private No prox = null; public No(Residencia r) { this.r = r; } public Residencia getRes() { return(this.r); } public No getProx() { return(this.prox); } } Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 31 / 33
  • 115. QUE SACANAGEM!!! Java j´a faz tudo pra vocˆe! LinkedList (duplamente ligada): https://docs.oracle. com/javase/9/docs/api/java/util/LinkedList.html Vector (arranjo de tamanho vari´avel): https://docs.oracle.com/javase/9/docs/api/java/ util/Vector.html Stack (de Vector): https://docs.oracle.com/javase/9/ docs/api/java/util/Stack.html Queue (interface – mais adiante veremos): https://docs. oracle.com/javase/9/docs/api/java/util/Queue.html Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 32 / 33
  • 116. Videoaula N˜ao h´a. Norton Trevisan Roman Aula 21 – Listas Ligadas 12 de maio de 2020 33 / 33