![Page 1: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/1.jpg)
MC-202 — Unidade 7Operações em listas e variações
Rafael C. S. [email protected]
Universidade Estadual de Campinas
1º semestre/2018
![Page 2: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/2.jpg)
Operações em lista ligada
Vamos ver três novas operações para listas ligadas
1 typedef struct No {2 int dado;3 struct No *prox;4 } No;56 typedef struct No * p_no;78 p_no criar_lista();9 void destruir_lista(p_no lista);
10 p_no adicionar_elemento(p_no lista, int x);11 void imprime(p_no lista);
1213 p_no copiar_lista(p_no lista);14 p_no inverter_lista(p_no lista);15 p_no concatenar_lista(p_no primeira, p_no segunda);
2
![Page 3: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/3.jpg)
Operações em lista ligada
Vamos ver três novas operações para listas ligadas1 typedef struct No {2 int dado;3 struct No *prox;4 } No;56 typedef struct No * p_no;78 p_no criar_lista();9 void destruir_lista(p_no lista);
10 p_no adicionar_elemento(p_no lista, int x);11 void imprime(p_no lista);
1213 p_no copiar_lista(p_no lista);14 p_no inverter_lista(p_no lista);15 p_no concatenar_lista(p_no primeira, p_no segunda);
2
![Page 4: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/4.jpg)
Operações em lista ligada
Vamos ver três novas operações para listas ligadas1 typedef struct No {2 int dado;3 struct No *prox;4 } No;56 typedef struct No * p_no;78 p_no criar_lista();9 void destruir_lista(p_no lista);
10 p_no adicionar_elemento(p_no lista, int x);11 void imprime(p_no lista);
1213 p_no copiar_lista(p_no lista);14 p_no inverter_lista(p_no lista);15 p_no concatenar_lista(p_no primeira, p_no segunda);
2
![Page 5: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/5.jpg)
Operações em lista ligada
Vamos ver três novas operações para listas ligadas1 typedef struct No {2 int dado;3 struct No *prox;4 } No;56 typedef struct No * p_no;78 p_no criar_lista();9 void destruir_lista(p_no lista);
10 p_no adicionar_elemento(p_no lista, int x);11 void imprime(p_no lista);1213 p_no copiar_lista(p_no lista);
14 p_no inverter_lista(p_no lista);15 p_no concatenar_lista(p_no primeira, p_no segunda);
2
![Page 6: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/6.jpg)
Operações em lista ligada
Vamos ver três novas operações para listas ligadas1 typedef struct No {2 int dado;3 struct No *prox;4 } No;56 typedef struct No * p_no;78 p_no criar_lista();9 void destruir_lista(p_no lista);
10 p_no adicionar_elemento(p_no lista, int x);11 void imprime(p_no lista);1213 p_no copiar_lista(p_no lista);14 p_no inverter_lista(p_no lista);
15 p_no concatenar_lista(p_no primeira, p_no segunda);
2
![Page 7: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/7.jpg)
Operações em lista ligada
Vamos ver três novas operações para listas ligadas1 typedef struct No {2 int dado;3 struct No *prox;4 } No;56 typedef struct No * p_no;78 p_no criar_lista();9 void destruir_lista(p_no lista);
10 p_no adicionar_elemento(p_no lista, int x);11 void imprime(p_no lista);1213 p_no copiar_lista(p_no lista);14 p_no inverter_lista(p_no lista);15 p_no concatenar_lista(p_no primeira, p_no segunda);
2
![Page 8: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/8.jpg)
Copiando
Versão recursiva:
1 p_no copiar_lista(p_no lista) {
2 p_no novo;3 if(lista == NULL)4 return NULL;5 novo = malloc(sizeof(No));6 novo->dado = lista->dado;7 novo->prox = copiar_lista(lista->prox);8 return novo;9 }
Exercício: implemente uma versão iterativa da função
3
![Page 9: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/9.jpg)
Copiando
Versão recursiva:1 p_no copiar_lista(p_no lista) {
2 p_no novo;3 if(lista == NULL)4 return NULL;5 novo = malloc(sizeof(No));6 novo->dado = lista->dado;7 novo->prox = copiar_lista(lista->prox);8 return novo;9 }
Exercício: implemente uma versão iterativa da função
3
![Page 10: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/10.jpg)
Copiando
Versão recursiva:1 p_no copiar_lista(p_no lista) {
2 p_no novo;3 if(lista == NULL)4 return NULL;5 novo = malloc(sizeof(No));6 novo->dado = lista->dado;7 novo->prox = copiar_lista(lista->prox);8 return novo;9 }
Exercício: implemente uma versão iterativa da função
3
![Page 11: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/11.jpg)
Copiando
Versão recursiva:1 p_no copiar_lista(p_no lista) {2 p_no novo;3 if(lista == NULL)4 return NULL;
5 novo = malloc(sizeof(No));6 novo->dado = lista->dado;7 novo->prox = copiar_lista(lista->prox);8 return novo;9 }
Exercício: implemente uma versão iterativa da função
3
![Page 12: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/12.jpg)
Copiando
Versão recursiva:1 p_no copiar_lista(p_no lista) {2 p_no novo;3 if(lista == NULL)4 return NULL;5 novo = malloc(sizeof(No));6 novo->dado = lista->dado;7 novo->prox = copiar_lista(lista->prox);
8 return novo;9 }
Exercício: implemente uma versão iterativa da função
3
![Page 13: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/13.jpg)
Copiando
Versão recursiva:1 p_no copiar_lista(p_no lista) {2 p_no novo;3 if(lista == NULL)4 return NULL;5 novo = malloc(sizeof(No));6 novo->dado = lista->dado;7 novo->prox = copiar_lista(lista->prox);8 return novo;9 }
Exercício: implemente uma versão iterativa da função
3
![Page 14: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/14.jpg)
Copiando
Versão recursiva:1 p_no copiar_lista(p_no lista) {2 p_no novo;3 if(lista == NULL)4 return NULL;5 novo = malloc(sizeof(No));6 novo->dado = lista->dado;7 novo->prox = copiar_lista(lista->prox);8 return novo;9 }
Exercício: implemente uma versão iterativa da função
3
![Page 15: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/15.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 16: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/16.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 17: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/17.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 18: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/18.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 19: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/19.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 20: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/20.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 21: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/21.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 22: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/22.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 23: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/23.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 24: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/24.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 25: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/25.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 26: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/26.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 27: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/27.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 28: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/28.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 29: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/29.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 30: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/30.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 31: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/31.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 32: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/32.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 33: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/33.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função
4
![Page 34: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/34.jpg)
Invertendo1 p_no inverter_lista(p_no lista) {2 p_no atual, ant, invertida = NULL;3 atual = lista;4 while (atual != NULL) {5 ant = atual;6 atual = ant->prox;7 ant->prox = invertida;8 invertida = ant;9 }
10 return invertida;11 }
lista invertida atualant
Exercício: implemente uma versão recursiva da função4
![Page 35: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/35.jpg)
Concatenando
1 p_no concatenar_lista(p_no primeira, p_no segunda) {
2 if (primeira == NULL)3 return segunda;4 primeira->prox = concatenar_lista(primeira->prox, segunda);5 return primeira;6 }
5
![Page 36: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/36.jpg)
Concatenando
1 p_no concatenar_lista(p_no primeira, p_no segunda) {
2 if (primeira == NULL)3 return segunda;4 primeira->prox = concatenar_lista(primeira->prox, segunda);5 return primeira;6 }
5
![Page 37: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/37.jpg)
Concatenando
1 p_no concatenar_lista(p_no primeira, p_no segunda) {2 if (primeira == NULL)
3 return segunda;4 primeira->prox = concatenar_lista(primeira->prox, segunda);5 return primeira;6 }
5
![Page 38: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/38.jpg)
Concatenando
1 p_no concatenar_lista(p_no primeira, p_no segunda) {2 if (primeira == NULL)3 return segunda;
4 primeira->prox = concatenar_lista(primeira->prox, segunda);5 return primeira;6 }
5
![Page 39: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/39.jpg)
Concatenando
1 p_no concatenar_lista(p_no primeira, p_no segunda) {2 if (primeira == NULL)3 return segunda;4 primeira->prox = concatenar_lista(primeira->prox, segunda);
5 return primeira;6 }
5
![Page 40: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/40.jpg)
Concatenando
1 p_no concatenar_lista(p_no primeira, p_no segunda) {2 if (primeira == NULL)3 return segunda;4 primeira->prox = concatenar_lista(primeira->prox, segunda);5 return primeira;6 }
5
![Page 41: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/41.jpg)
Variações - Listas circulares
Lista circular:
p
Lista circular vazia:p
Exemplo de aplicações:• Execução de processos no sistema operacional• Controlar de quem é a vez em um jogo de tabuleiro
6
![Page 42: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/42.jpg)
Variações - Listas circulares
Lista circular:
p
Lista circular vazia:p
Exemplo de aplicações:• Execução de processos no sistema operacional• Controlar de quem é a vez em um jogo de tabuleiro
6
![Page 43: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/43.jpg)
Variações - Listas circulares
Lista circular:
p
Lista circular vazia:p
Exemplo de aplicações:
• Execução de processos no sistema operacional• Controlar de quem é a vez em um jogo de tabuleiro
6
![Page 44: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/44.jpg)
Variações - Listas circulares
Lista circular:
p
Lista circular vazia:p
Exemplo de aplicações:• Execução de processos no sistema operacional
• Controlar de quem é a vez em um jogo de tabuleiro
6
![Page 45: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/45.jpg)
Variações - Listas circulares
Lista circular:
p
Lista circular vazia:p
Exemplo de aplicações:• Execução de processos no sistema operacional• Controlar de quem é a vez em um jogo de tabuleiro
6
![Page 46: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/46.jpg)
Inserindo em lista circular
1 p_no inserir_circular(p_no lista, int x) {
2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 if (lista == NULL)6 novo->prox = novo;7 else {8 novo->prox = lista->prox;9 lista->prox = novo;
10 }11 return novo;12 }
Observações:• O elemento é inserido na segunda posição
– Para inserir na primeira precisaria percorrer a lista... O(n)
• É devolvido o ponteiro para o novo elemento– Ex: ao inserir 0 em (3, 7, 2) ficamos com (0, 7, 2, 3)
7
![Page 47: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/47.jpg)
Inserindo em lista circular
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;
5 if (lista == NULL)6 novo->prox = novo;7 else {8 novo->prox = lista->prox;9 lista->prox = novo;
10 }11 return novo;12 }
Observações:• O elemento é inserido na segunda posição
– Para inserir na primeira precisaria percorrer a lista... O(n)
• É devolvido o ponteiro para o novo elemento– Ex: ao inserir 0 em (3, 7, 2) ficamos com (0, 7, 2, 3)
7
![Page 48: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/48.jpg)
Inserindo em lista circular
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 if (lista == NULL)6 novo->prox = novo;
7 else {8 novo->prox = lista->prox;9 lista->prox = novo;
10 }11 return novo;12 }
Observações:• O elemento é inserido na segunda posição
– Para inserir na primeira precisaria percorrer a lista... O(n)
• É devolvido o ponteiro para o novo elemento– Ex: ao inserir 0 em (3, 7, 2) ficamos com (0, 7, 2, 3)
7
![Page 49: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/49.jpg)
Inserindo em lista circular
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 if (lista == NULL)6 novo->prox = novo;7 else {
8 novo->prox = lista->prox;9 lista->prox = novo;
10 }11 return novo;12 }
Observações:• O elemento é inserido na segunda posição
– Para inserir na primeira precisaria percorrer a lista... O(n)
• É devolvido o ponteiro para o novo elemento– Ex: ao inserir 0 em (3, 7, 2) ficamos com (0, 7, 2, 3)
7
![Page 50: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/50.jpg)
Inserindo em lista circular
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 if (lista == NULL)6 novo->prox = novo;7 else {8 novo->prox = lista->prox;
9 lista->prox = novo;10 }11 return novo;12 }
Observações:• O elemento é inserido na segunda posição
– Para inserir na primeira precisaria percorrer a lista... O(n)
• É devolvido o ponteiro para o novo elemento– Ex: ao inserir 0 em (3, 7, 2) ficamos com (0, 7, 2, 3)
7
![Page 51: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/51.jpg)
Inserindo em lista circular
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 if (lista == NULL)6 novo->prox = novo;7 else {8 novo->prox = lista->prox;9 lista->prox = novo;
10 }
11 return novo;12 }
Observações:• O elemento é inserido na segunda posição
– Para inserir na primeira precisaria percorrer a lista... O(n)
• É devolvido o ponteiro para o novo elemento– Ex: ao inserir 0 em (3, 7, 2) ficamos com (0, 7, 2, 3)
7
![Page 52: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/52.jpg)
Inserindo em lista circular
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 if (lista == NULL)6 novo->prox = novo;7 else {8 novo->prox = lista->prox;9 lista->prox = novo;
10 }11 return novo;12 }
Observações:• O elemento é inserido na segunda posição
– Para inserir na primeira precisaria percorrer a lista... O(n)
• É devolvido o ponteiro para o novo elemento– Ex: ao inserir 0 em (3, 7, 2) ficamos com (0, 7, 2, 3)
7
![Page 53: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/53.jpg)
Inserindo em lista circular
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 if (lista == NULL)6 novo->prox = novo;7 else {8 novo->prox = lista->prox;9 lista->prox = novo;
10 }11 return novo;12 }
Observações:
• O elemento é inserido na segunda posição– Para inserir na primeira precisaria percorrer a lista... O(n)
• É devolvido o ponteiro para o novo elemento– Ex: ao inserir 0 em (3, 7, 2) ficamos com (0, 7, 2, 3)
7
![Page 54: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/54.jpg)
Inserindo em lista circular
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 if (lista == NULL)6 novo->prox = novo;7 else {8 novo->prox = lista->prox;9 lista->prox = novo;
10 }11 return novo;12 }
Observações:• O elemento é inserido na segunda posição
– Para inserir na primeira precisaria percorrer a lista... O(n)
• É devolvido o ponteiro para o novo elemento– Ex: ao inserir 0 em (3, 7, 2) ficamos com (0, 7, 2, 3)
7
![Page 55: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/55.jpg)
Inserindo em lista circular
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 if (lista == NULL)6 novo->prox = novo;7 else {8 novo->prox = lista->prox;9 lista->prox = novo;
10 }11 return novo;12 }
Observações:• O elemento é inserido na segunda posição
– Para inserir na primeira precisaria percorrer a lista... O(n)
• É devolvido o ponteiro para o novo elemento– Ex: ao inserir 0 em (3, 7, 2) ficamos com (0, 7, 2, 3)
7
![Page 56: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/56.jpg)
Inserindo em lista circular
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 if (lista == NULL)6 novo->prox = novo;7 else {8 novo->prox = lista->prox;9 lista->prox = novo;
10 }11 return novo;12 }
Observações:• O elemento é inserido na segunda posição
– Para inserir na primeira precisaria percorrer a lista... O(n)
• É devolvido o ponteiro para o novo elemento
– Ex: ao inserir 0 em (3, 7, 2) ficamos com (0, 7, 2, 3)
7
![Page 57: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/57.jpg)
Inserindo em lista circular
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 if (lista == NULL)6 novo->prox = novo;7 else {8 novo->prox = lista->prox;9 lista->prox = novo;
10 }11 return novo;12 }
Observações:• O elemento é inserido na segunda posição
– Para inserir na primeira precisaria percorrer a lista... O(n)
• É devolvido o ponteiro para o novo elemento– Ex: ao inserir 0 em (3, 7, 2) ficamos com (0, 7, 2, 3)
7
![Page 58: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/58.jpg)
Removendo de lista circular
1 p_no remover_circular(p_no lista, p_no no) {
2 p_no ant;3 if (no->prox == no) {4 free(no);5 return NULL;6 }7 for(ant = no->prox; ant->prox != no; ant = ant->prox);8 ant->prox = no->prox;9 if (lista == no)
10 lista = lista->prox;11 free(no);12 return lista;13 }
Tempo: O(n)• Podemos melhorar se soubermos o nó anterior...
8
![Page 59: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/59.jpg)
Removendo de lista circular
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 if (no->prox == no) {
4 free(no);5 return NULL;6 }7 for(ant = no->prox; ant->prox != no; ant = ant->prox);8 ant->prox = no->prox;9 if (lista == no)
10 lista = lista->prox;11 free(no);12 return lista;13 }
Tempo: O(n)• Podemos melhorar se soubermos o nó anterior...
8
![Page 60: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/60.jpg)
Removendo de lista circular
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 if (no->prox == no) {4 free(no);5 return NULL;6 }
7 for(ant = no->prox; ant->prox != no; ant = ant->prox);8 ant->prox = no->prox;9 if (lista == no)
10 lista = lista->prox;11 free(no);12 return lista;13 }
Tempo: O(n)• Podemos melhorar se soubermos o nó anterior...
8
![Page 61: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/61.jpg)
Removendo de lista circular
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 if (no->prox == no) {4 free(no);5 return NULL;6 }7 for(ant = no->prox; ant->prox != no; ant = ant->prox);
8 ant->prox = no->prox;9 if (lista == no)
10 lista = lista->prox;11 free(no);12 return lista;13 }
Tempo: O(n)• Podemos melhorar se soubermos o nó anterior...
8
![Page 62: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/62.jpg)
Removendo de lista circular
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 if (no->prox == no) {4 free(no);5 return NULL;6 }7 for(ant = no->prox; ant->prox != no; ant = ant->prox);8 ant->prox = no->prox;
9 if (lista == no)10 lista = lista->prox;11 free(no);12 return lista;13 }
Tempo: O(n)• Podemos melhorar se soubermos o nó anterior...
8
![Page 63: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/63.jpg)
Removendo de lista circular
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 if (no->prox == no) {4 free(no);5 return NULL;6 }7 for(ant = no->prox; ant->prox != no; ant = ant->prox);8 ant->prox = no->prox;9 if (lista == no)
10 lista = lista->prox;
11 free(no);12 return lista;13 }
Tempo: O(n)• Podemos melhorar se soubermos o nó anterior...
8
![Page 64: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/64.jpg)
Removendo de lista circular
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 if (no->prox == no) {4 free(no);5 return NULL;6 }7 for(ant = no->prox; ant->prox != no; ant = ant->prox);8 ant->prox = no->prox;9 if (lista == no)
10 lista = lista->prox;11 free(no);
12 return lista;13 }
Tempo: O(n)• Podemos melhorar se soubermos o nó anterior...
8
![Page 65: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/65.jpg)
Removendo de lista circular
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 if (no->prox == no) {4 free(no);5 return NULL;6 }7 for(ant = no->prox; ant->prox != no; ant = ant->prox);8 ant->prox = no->prox;9 if (lista == no)
10 lista = lista->prox;11 free(no);12 return lista;13 }
Tempo: O(n)• Podemos melhorar se soubermos o nó anterior...
8
![Page 66: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/66.jpg)
Removendo de lista circular
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 if (no->prox == no) {4 free(no);5 return NULL;6 }7 for(ant = no->prox; ant->prox != no; ant = ant->prox);8 ant->prox = no->prox;9 if (lista == no)
10 lista = lista->prox;11 free(no);12 return lista;13 }
Tempo: O(n)• Podemos melhorar se soubermos o nó anterior...
8
![Page 67: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/67.jpg)
Removendo de lista circular
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 if (no->prox == no) {4 free(no);5 return NULL;6 }7 for(ant = no->prox; ant->prox != no; ant = ant->prox);8 ant->prox = no->prox;9 if (lista == no)
10 lista = lista->prox;11 free(no);12 return lista;13 }
Tempo: O(n)
• Podemos melhorar se soubermos o nó anterior...
8
![Page 68: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/68.jpg)
Removendo de lista circular
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 if (no->prox == no) {4 free(no);5 return NULL;6 }7 for(ant = no->prox; ant->prox != no; ant = ant->prox);8 ant->prox = no->prox;9 if (lista == no)
10 lista = lista->prox;11 free(no);12 return lista;13 }
Tempo: O(n)• Podemos melhorar se soubermos o nó anterior...
8
![Page 69: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/69.jpg)
Percorrendo uma lista circular
1 void imprimir_lista_circular(p_no lista) {2 p_no p;3 p = lista;4 do {5 printf("%d\n", p->dado);6 p = p->prox;7 } while (p != lista);8 }
• E se tivéssemos usado while ao invés de do ... while?• Essa função pode ser usada com lista vazia?
– Como corrigir isso?
9
![Page 70: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/70.jpg)
Percorrendo uma lista circular
1 void imprimir_lista_circular(p_no lista) {2 p_no p;3 p = lista;4 do {5 printf("%d\n", p->dado);6 p = p->prox;7 } while (p != lista);8 }
• E se tivéssemos usado while ao invés de do ... while?
• Essa função pode ser usada com lista vazia?
– Como corrigir isso?
9
![Page 71: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/71.jpg)
Percorrendo uma lista circular
1 void imprimir_lista_circular(p_no lista) {2 p_no p;3 p = lista;4 do {5 printf("%d\n", p->dado);6 p = p->prox;7 } while (p != lista);8 }
• E se tivéssemos usado while ao invés de do ... while?• Essa função pode ser usada com lista vazia?
– Como corrigir isso?
9
![Page 72: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/72.jpg)
Percorrendo uma lista circular
1 void imprimir_lista_circular(p_no lista) {2 p_no p;3 p = lista;4 do {5 printf("%d\n", p->dado);6 p = p->prox;7 } while (p != lista);8 }
• E se tivéssemos usado while ao invés de do ... while?• Essa função pode ser usada com lista vazia?
– Como corrigir isso?
9
![Page 73: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/73.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
10
![Page 74: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/74.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa
• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
10
![Page 75: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/75.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas
• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
10
![Page 76: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/76.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa
• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
10
![Page 77: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/77.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa
• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
10
![Page 78: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/78.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
10
![Page 79: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/79.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
10
![Page 80: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/80.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
1
10
![Page 81: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/81.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
2
10
![Page 82: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/82.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
3
10
![Page 83: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/83.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
2
3
10
![Page 84: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/84.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
2
1
10
![Page 85: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/85.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
2
2
10
![Page 86: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/86.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
2
3
10
![Page 87: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/87.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
2
0
3
10
![Page 88: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/88.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
2
0
1
10
![Page 89: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/89.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
2
0
2
10
![Page 90: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/90.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
2
0
3
10
![Page 91: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/91.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
2
0
4
3
10
![Page 92: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/92.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
2
0
4
1
10
![Page 93: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/93.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
2
0
4
2
10
![Page 94: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/94.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
2
0
4
3
10
![Page 95: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/95.jpg)
Exercício - Problema de JosephusVamos eleger um líder entre N pessoas
• Começamos a contar da primeira pessoa• Contamos M pessoas• Eliminamos (M + 1)-ésima pessoa• Continuamos da próxima pessoa• Ciclamos ao chegar ao final
Exemplo: N = 5 e M = 2
0
1
23
4
2
0
4 1
3
10
![Page 96: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/96.jpg)
Problema de Josephus
1 int main() {2 p_no lista, temp;
3 int i, N = 5, M = 2;4 lista = criar_lista_circular();5 for (i = 0; i < N; i++)6 lista = inserir_circular(lista, i);7 while (lista != lista->prox) {8 for (i = 0; i < M; i++)9 lista = lista->prox;
10 temp = lista->prox;11 lista->prox = lista->prox->prox;12 free(temp);13 }14 printf("%d\n", lista->dado);15 return 0;16 }
11
![Page 97: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/97.jpg)
Problema de Josephus
1 int main() {2 p_no lista, temp;3 int i, N = 5, M = 2;
4 lista = criar_lista_circular();5 for (i = 0; i < N; i++)6 lista = inserir_circular(lista, i);7 while (lista != lista->prox) {8 for (i = 0; i < M; i++)9 lista = lista->prox;
10 temp = lista->prox;11 lista->prox = lista->prox->prox;12 free(temp);13 }14 printf("%d\n", lista->dado);15 return 0;16 }
11
![Page 98: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/98.jpg)
Problema de Josephus
1 int main() {2 p_no lista, temp;3 int i, N = 5, M = 2;4 lista = criar_lista_circular();
5 for (i = 0; i < N; i++)6 lista = inserir_circular(lista, i);7 while (lista != lista->prox) {8 for (i = 0; i < M; i++)9 lista = lista->prox;
10 temp = lista->prox;11 lista->prox = lista->prox->prox;12 free(temp);13 }14 printf("%d\n", lista->dado);15 return 0;16 }
11
![Page 99: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/99.jpg)
Problema de Josephus
1 int main() {2 p_no lista, temp;3 int i, N = 5, M = 2;4 lista = criar_lista_circular();5 for (i = 0; i < N; i++)6 lista = inserir_circular(lista, i);
7 while (lista != lista->prox) {8 for (i = 0; i < M; i++)9 lista = lista->prox;
10 temp = lista->prox;11 lista->prox = lista->prox->prox;12 free(temp);13 }14 printf("%d\n", lista->dado);15 return 0;16 }
11
![Page 100: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/100.jpg)
Problema de Josephus
1 int main() {2 p_no lista, temp;3 int i, N = 5, M = 2;4 lista = criar_lista_circular();5 for (i = 0; i < N; i++)6 lista = inserir_circular(lista, i);7 while (lista != lista->prox) {
8 for (i = 0; i < M; i++)9 lista = lista->prox;
10 temp = lista->prox;11 lista->prox = lista->prox->prox;12 free(temp);13 }14 printf("%d\n", lista->dado);15 return 0;16 }
11
![Page 101: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/101.jpg)
Problema de Josephus
1 int main() {2 p_no lista, temp;3 int i, N = 5, M = 2;4 lista = criar_lista_circular();5 for (i = 0; i < N; i++)6 lista = inserir_circular(lista, i);7 while (lista != lista->prox) {8 for (i = 0; i < M; i++)9 lista = lista->prox;
10 temp = lista->prox;11 lista->prox = lista->prox->prox;12 free(temp);13 }14 printf("%d\n", lista->dado);15 return 0;16 }
11
![Page 102: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/102.jpg)
Problema de Josephus
1 int main() {2 p_no lista, temp;3 int i, N = 5, M = 2;4 lista = criar_lista_circular();5 for (i = 0; i < N; i++)6 lista = inserir_circular(lista, i);7 while (lista != lista->prox) {8 for (i = 0; i < M; i++)9 lista = lista->prox;
10 temp = lista->prox;
11 lista->prox = lista->prox->prox;12 free(temp);13 }14 printf("%d\n", lista->dado);15 return 0;16 }
11
![Page 103: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/103.jpg)
Problema de Josephus
1 int main() {2 p_no lista, temp;3 int i, N = 5, M = 2;4 lista = criar_lista_circular();5 for (i = 0; i < N; i++)6 lista = inserir_circular(lista, i);7 while (lista != lista->prox) {8 for (i = 0; i < M; i++)9 lista = lista->prox;
10 temp = lista->prox;11 lista->prox = lista->prox->prox;
12 free(temp);13 }14 printf("%d\n", lista->dado);15 return 0;16 }
11
![Page 104: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/104.jpg)
Problema de Josephus
1 int main() {2 p_no lista, temp;3 int i, N = 5, M = 2;4 lista = criar_lista_circular();5 for (i = 0; i < N; i++)6 lista = inserir_circular(lista, i);7 while (lista != lista->prox) {8 for (i = 0; i < M; i++)9 lista = lista->prox;
10 temp = lista->prox;11 lista->prox = lista->prox->prox;12 free(temp);
13 }14 printf("%d\n", lista->dado);15 return 0;16 }
11
![Page 105: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/105.jpg)
Problema de Josephus
1 int main() {2 p_no lista, temp;3 int i, N = 5, M = 2;4 lista = criar_lista_circular();5 for (i = 0; i < N; i++)6 lista = inserir_circular(lista, i);7 while (lista != lista->prox) {8 for (i = 0; i < M; i++)9 lista = lista->prox;
10 temp = lista->prox;11 lista->prox = lista->prox->prox;12 free(temp);13 }14 printf("%d\n", lista->dado);15 return 0;16 }
11
![Page 106: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/106.jpg)
Revistando a InserçãoO código para inserir em uma lista circular não está bom
12 p_no inserir_circular(p_no lista, int x) {3 p_no novo;4 novo = malloc(sizeof(No));5 novo->dado = x;6 if (lista == NULL)7 novo->prox = novo;8 else {9 novo->prox = lista->prox;
10 lista->prox = novo;11 }12 return novo;
Precisa lidar com dois casos• lista vazia ou não vazia• A remoção sofre com o mesmo problema
Tem um comportamento estranho• Inserimos após o primeiro elemento• Mudamos quem é o primeiro elemento da lista
12
![Page 107: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/107.jpg)
Revistando a InserçãoO código para inserir em uma lista circular não está bom
12 p_no inserir_circular(p_no lista, int x) {3 p_no novo;4 novo = malloc(sizeof(No));5 novo->dado = x;6 if (lista == NULL)7 novo->prox = novo;8 else {9 novo->prox = lista->prox;
10 lista->prox = novo;11 }12 return novo;
Precisa lidar com dois casos• lista vazia ou não vazia• A remoção sofre com o mesmo problema
Tem um comportamento estranho• Inserimos após o primeiro elemento• Mudamos quem é o primeiro elemento da lista
12
![Page 108: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/108.jpg)
Revistando a InserçãoO código para inserir em uma lista circular não está bom
12 p_no inserir_circular(p_no lista, int x) {3 p_no novo;4 novo = malloc(sizeof(No));5 novo->dado = x;6 if (lista == NULL)7 novo->prox = novo;8 else {9 novo->prox = lista->prox;
10 lista->prox = novo;11 }12 return novo;
Precisa lidar com dois casos
• lista vazia ou não vazia• A remoção sofre com o mesmo problema
Tem um comportamento estranho• Inserimos após o primeiro elemento• Mudamos quem é o primeiro elemento da lista
12
![Page 109: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/109.jpg)
Revistando a InserçãoO código para inserir em uma lista circular não está bom
12 p_no inserir_circular(p_no lista, int x) {3 p_no novo;4 novo = malloc(sizeof(No));5 novo->dado = x;6 if (lista == NULL)7 novo->prox = novo;8 else {9 novo->prox = lista->prox;
10 lista->prox = novo;11 }12 return novo;
Precisa lidar com dois casos• lista vazia ou não vazia
• A remoção sofre com o mesmo problema
Tem um comportamento estranho• Inserimos após o primeiro elemento• Mudamos quem é o primeiro elemento da lista
12
![Page 110: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/110.jpg)
Revistando a InserçãoO código para inserir em uma lista circular não está bom
12 p_no inserir_circular(p_no lista, int x) {3 p_no novo;4 novo = malloc(sizeof(No));5 novo->dado = x;6 if (lista == NULL)7 novo->prox = novo;8 else {9 novo->prox = lista->prox;
10 lista->prox = novo;11 }12 return novo;
Precisa lidar com dois casos• lista vazia ou não vazia• A remoção sofre com o mesmo problema
Tem um comportamento estranho• Inserimos após o primeiro elemento• Mudamos quem é o primeiro elemento da lista
12
![Page 111: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/111.jpg)
Revistando a InserçãoO código para inserir em uma lista circular não está bom
12 p_no inserir_circular(p_no lista, int x) {3 p_no novo;4 novo = malloc(sizeof(No));5 novo->dado = x;6 if (lista == NULL)7 novo->prox = novo;8 else {9 novo->prox = lista->prox;
10 lista->prox = novo;11 }12 return novo;
Precisa lidar com dois casos• lista vazia ou não vazia• A remoção sofre com o mesmo problema
Tem um comportamento estranho
• Inserimos após o primeiro elemento• Mudamos quem é o primeiro elemento da lista
12
![Page 112: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/112.jpg)
Revistando a InserçãoO código para inserir em uma lista circular não está bom
12 p_no inserir_circular(p_no lista, int x) {3 p_no novo;4 novo = malloc(sizeof(No));5 novo->dado = x;6 if (lista == NULL)7 novo->prox = novo;8 else {9 novo->prox = lista->prox;
10 lista->prox = novo;11 }12 return novo;
Precisa lidar com dois casos• lista vazia ou não vazia• A remoção sofre com o mesmo problema
Tem um comportamento estranho• Inserimos após o primeiro elemento
• Mudamos quem é o primeiro elemento da lista
12
![Page 113: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/113.jpg)
Revistando a InserçãoO código para inserir em uma lista circular não está bom
12 p_no inserir_circular(p_no lista, int x) {3 p_no novo;4 novo = malloc(sizeof(No));5 novo->dado = x;6 if (lista == NULL)7 novo->prox = novo;8 else {9 novo->prox = lista->prox;
10 lista->prox = novo;11 }12 return novo;
Precisa lidar com dois casos• lista vazia ou não vazia• A remoção sofre com o mesmo problema
Tem um comportamento estranho• Inserimos após o primeiro elemento• Mudamos quem é o primeiro elemento da lista
12
![Page 114: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/114.jpg)
Listas circulares com cabeçaLista circular com cabeça:
p
Lista circular vazia:p
Diferenças para a versão sem cabeça:• lista sempre aponta para o nó dummy• código de inserção e de remoção mais simples• ao percorrer tem que ignorar cabeça
13
![Page 115: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/115.jpg)
Listas circulares com cabeçaLista circular com cabeça:
p
Lista circular vazia:p
Diferenças para a versão sem cabeça:• lista sempre aponta para o nó dummy• código de inserção e de remoção mais simples• ao percorrer tem que ignorar cabeça
13
![Page 116: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/116.jpg)
Listas circulares com cabeçaLista circular com cabeça:
p
Lista circular vazia:p
Diferenças para a versão sem cabeça:
• lista sempre aponta para o nó dummy• código de inserção e de remoção mais simples• ao percorrer tem que ignorar cabeça
13
![Page 117: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/117.jpg)
Listas circulares com cabeçaLista circular com cabeça:
p
Lista circular vazia:p
Diferenças para a versão sem cabeça:• lista sempre aponta para o nó dummy
• código de inserção e de remoção mais simples• ao percorrer tem que ignorar cabeça
13
![Page 118: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/118.jpg)
Listas circulares com cabeçaLista circular com cabeça:
p
Lista circular vazia:p
Diferenças para a versão sem cabeça:• lista sempre aponta para o nó dummy• código de inserção e de remoção mais simples
• ao percorrer tem que ignorar cabeça
13
![Page 119: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/119.jpg)
Listas circulares com cabeçaLista circular com cabeça:
p
Lista circular vazia:p
Diferenças para a versão sem cabeça:• lista sempre aponta para o nó dummy• código de inserção e de remoção mais simples• ao percorrer tem que ignorar cabeça
13
![Page 120: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/120.jpg)
Inserção e remoção simplificadas
1 p_no inserir_circular(p_no lista, int x) {
2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = lista->prox;6 lista->prox = novo;7 return lista;8 }
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 for(ant = no->prox; ant->prox != no; ant = ant->prox);4 ant->prox = no->prox;5 free(no);6 return lista;7 }
14
![Page 121: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/121.jpg)
Inserção e remoção simplificadas
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;
3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = lista->prox;6 lista->prox = novo;7 return lista;8 }
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 for(ant = no->prox; ant->prox != no; ant = ant->prox);4 ant->prox = no->prox;5 free(no);6 return lista;7 }
14
![Page 122: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/122.jpg)
Inserção e remoção simplificadas
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));
4 novo->dado = x;5 novo->prox = lista->prox;6 lista->prox = novo;7 return lista;8 }
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 for(ant = no->prox; ant->prox != no; ant = ant->prox);4 ant->prox = no->prox;5 free(no);6 return lista;7 }
14
![Page 123: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/123.jpg)
Inserção e remoção simplificadas
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;
5 novo->prox = lista->prox;6 lista->prox = novo;7 return lista;8 }
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 for(ant = no->prox; ant->prox != no; ant = ant->prox);4 ant->prox = no->prox;5 free(no);6 return lista;7 }
14
![Page 124: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/124.jpg)
Inserção e remoção simplificadas
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = lista->prox;
6 lista->prox = novo;7 return lista;8 }
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 for(ant = no->prox; ant->prox != no; ant = ant->prox);4 ant->prox = no->prox;5 free(no);6 return lista;7 }
14
![Page 125: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/125.jpg)
Inserção e remoção simplificadas
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = lista->prox;6 lista->prox = novo;
7 return lista;8 }
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 for(ant = no->prox; ant->prox != no; ant = ant->prox);4 ant->prox = no->prox;5 free(no);6 return lista;7 }
14
![Page 126: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/126.jpg)
Inserção e remoção simplificadas
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = lista->prox;6 lista->prox = novo;7 return lista;8 }
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 for(ant = no->prox; ant->prox != no; ant = ant->prox);4 ant->prox = no->prox;5 free(no);6 return lista;7 }
14
![Page 127: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/127.jpg)
Inserção e remoção simplificadas
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = lista->prox;6 lista->prox = novo;7 return lista;8 }
1 p_no remover_circular(p_no lista, p_no no) {
2 p_no ant;3 for(ant = no->prox; ant->prox != no; ant = ant->prox);4 ant->prox = no->prox;5 free(no);6 return lista;7 }
14
![Page 128: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/128.jpg)
Inserção e remoção simplificadas
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = lista->prox;6 lista->prox = novo;7 return lista;8 }
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;
3 for(ant = no->prox; ant->prox != no; ant = ant->prox);4 ant->prox = no->prox;5 free(no);6 return lista;7 }
14
![Page 129: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/129.jpg)
Inserção e remoção simplificadas
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = lista->prox;6 lista->prox = novo;7 return lista;8 }
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 for(ant = no->prox; ant->prox != no; ant = ant->prox);
4 ant->prox = no->prox;5 free(no);6 return lista;7 }
14
![Page 130: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/130.jpg)
Inserção e remoção simplificadas
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = lista->prox;6 lista->prox = novo;7 return lista;8 }
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 for(ant = no->prox; ant->prox != no; ant = ant->prox);4 ant->prox = no->prox;
5 free(no);6 return lista;7 }
14
![Page 131: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/131.jpg)
Inserção e remoção simplificadas
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = lista->prox;6 lista->prox = novo;7 return lista;8 }
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 for(ant = no->prox; ant->prox != no; ant = ant->prox);4 ant->prox = no->prox;5 free(no);
6 return lista;7 }
14
![Page 132: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/132.jpg)
Inserção e remoção simplificadas
1 p_no inserir_circular(p_no lista, int x) {2 p_no novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = lista->prox;6 lista->prox = novo;7 return lista;8 }
1 p_no remover_circular(p_no lista, p_no no) {2 p_no ant;3 for(ant = no->prox; ant->prox != no; ant = ant->prox);4 ant->prox = no->prox;5 free(no);6 return lista;7 }
14
![Page 133: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/133.jpg)
Variações - Duplamente ligada
ini fim
Exemplos:• Operações desfazer/refazer em software• Player de música (música anterior e próxima música)
15
![Page 134: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/134.jpg)
Variações - Duplamente ligada
ini fim
Exemplos:• Operações desfazer/refazer em software• Player de música (música anterior e próxima música)
15
![Page 135: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/135.jpg)
Variações - Lista dupla circular
ini fim
Permite inserção e remoção em O(1)• Variável fim é opcional (fim == ini->ant)
Podemos ter uma lista dupla circular com cabeça também...
16
![Page 136: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/136.jpg)
Variações - Lista dupla circular
ini fim
Permite inserção e remoção em O(1)
• Variável fim é opcional (fim == ini->ant)
Podemos ter uma lista dupla circular com cabeça também...
16
![Page 137: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/137.jpg)
Variações - Lista dupla circular
ini fim
Permite inserção e remoção em O(1)• Variável fim é opcional (fim == ini->ant)
Podemos ter uma lista dupla circular com cabeça também...
16
![Page 138: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/138.jpg)
Variações - Lista dupla circular
ini fim
Permite inserção e remoção em O(1)• Variável fim é opcional (fim == ini->ant)
Podemos ter uma lista dupla circular com cabeça também...
16
![Page 139: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/139.jpg)
Gerenciamento de memóriaNo nosso código para listas ligadas, toda vez que:
• Precisamos de um novo nó, fazemos um malloc• Toda vez que removemos um nó, fazemos um free
Alternativa:• Poderíamos alocar muitos nós de uma vez só
– fazendo poucas chamadas para malloc
• Poderíamos esperar para liberar nós no final do programa
– Podemos reutilizar esses nós– Diminuímos as chamadas para free e malloc
Como fazer esse controle?• Podemos usar uma lista ligada dos nós não utilizados• É o que chamamos de lista livre
17
![Page 140: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/140.jpg)
Gerenciamento de memóriaNo nosso código para listas ligadas, toda vez que:
• Precisamos de um novo nó, fazemos um malloc
• Toda vez que removemos um nó, fazemos um free
Alternativa:• Poderíamos alocar muitos nós de uma vez só
– fazendo poucas chamadas para malloc
• Poderíamos esperar para liberar nós no final do programa
– Podemos reutilizar esses nós– Diminuímos as chamadas para free e malloc
Como fazer esse controle?• Podemos usar uma lista ligada dos nós não utilizados• É o que chamamos de lista livre
17
![Page 141: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/141.jpg)
Gerenciamento de memóriaNo nosso código para listas ligadas, toda vez que:
• Precisamos de um novo nó, fazemos um malloc• Toda vez que removemos um nó, fazemos um free
Alternativa:• Poderíamos alocar muitos nós de uma vez só
– fazendo poucas chamadas para malloc
• Poderíamos esperar para liberar nós no final do programa
– Podemos reutilizar esses nós– Diminuímos as chamadas para free e malloc
Como fazer esse controle?• Podemos usar uma lista ligada dos nós não utilizados• É o que chamamos de lista livre
17
![Page 142: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/142.jpg)
Gerenciamento de memóriaNo nosso código para listas ligadas, toda vez que:
• Precisamos de um novo nó, fazemos um malloc• Toda vez que removemos um nó, fazemos um free
Alternativa:
• Poderíamos alocar muitos nós de uma vez só
– fazendo poucas chamadas para malloc
• Poderíamos esperar para liberar nós no final do programa
– Podemos reutilizar esses nós– Diminuímos as chamadas para free e malloc
Como fazer esse controle?• Podemos usar uma lista ligada dos nós não utilizados• É o que chamamos de lista livre
17
![Page 143: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/143.jpg)
Gerenciamento de memóriaNo nosso código para listas ligadas, toda vez que:
• Precisamos de um novo nó, fazemos um malloc• Toda vez que removemos um nó, fazemos um free
Alternativa:• Poderíamos alocar muitos nós de uma vez só
– fazendo poucas chamadas para malloc
• Poderíamos esperar para liberar nós no final do programa
– Podemos reutilizar esses nós– Diminuímos as chamadas para free e malloc
Como fazer esse controle?• Podemos usar uma lista ligada dos nós não utilizados• É o que chamamos de lista livre
17
![Page 144: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/144.jpg)
Gerenciamento de memóriaNo nosso código para listas ligadas, toda vez que:
• Precisamos de um novo nó, fazemos um malloc• Toda vez que removemos um nó, fazemos um free
Alternativa:• Poderíamos alocar muitos nós de uma vez só
– fazendo poucas chamadas para malloc
• Poderíamos esperar para liberar nós no final do programa
– Podemos reutilizar esses nós– Diminuímos as chamadas para free e malloc
Como fazer esse controle?• Podemos usar uma lista ligada dos nós não utilizados• É o que chamamos de lista livre
17
![Page 145: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/145.jpg)
Gerenciamento de memóriaNo nosso código para listas ligadas, toda vez que:
• Precisamos de um novo nó, fazemos um malloc• Toda vez que removemos um nó, fazemos um free
Alternativa:• Poderíamos alocar muitos nós de uma vez só
– fazendo poucas chamadas para malloc
• Poderíamos esperar para liberar nós no final do programa
– Podemos reutilizar esses nós– Diminuímos as chamadas para free e malloc
Como fazer esse controle?• Podemos usar uma lista ligada dos nós não utilizados• É o que chamamos de lista livre
17
![Page 146: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/146.jpg)
Gerenciamento de memóriaNo nosso código para listas ligadas, toda vez que:
• Precisamos de um novo nó, fazemos um malloc• Toda vez que removemos um nó, fazemos um free
Alternativa:• Poderíamos alocar muitos nós de uma vez só
– fazendo poucas chamadas para malloc
• Poderíamos esperar para liberar nós no final do programa– Podemos reutilizar esses nós
– Diminuímos as chamadas para free e malloc
Como fazer esse controle?• Podemos usar uma lista ligada dos nós não utilizados• É o que chamamos de lista livre
17
![Page 147: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/147.jpg)
Gerenciamento de memóriaNo nosso código para listas ligadas, toda vez que:
• Precisamos de um novo nó, fazemos um malloc• Toda vez que removemos um nó, fazemos um free
Alternativa:• Poderíamos alocar muitos nós de uma vez só
– fazendo poucas chamadas para malloc
• Poderíamos esperar para liberar nós no final do programa– Podemos reutilizar esses nós– Diminuímos as chamadas para free e malloc
Como fazer esse controle?• Podemos usar uma lista ligada dos nós não utilizados• É o que chamamos de lista livre
17
![Page 148: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/148.jpg)
Gerenciamento de memóriaNo nosso código para listas ligadas, toda vez que:
• Precisamos de um novo nó, fazemos um malloc• Toda vez que removemos um nó, fazemos um free
Alternativa:• Poderíamos alocar muitos nós de uma vez só
– fazendo poucas chamadas para malloc
• Poderíamos esperar para liberar nós no final do programa– Podemos reutilizar esses nós– Diminuímos as chamadas para free e malloc
Como fazer esse controle?
• Podemos usar uma lista ligada dos nós não utilizados• É o que chamamos de lista livre
17
![Page 149: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/149.jpg)
Gerenciamento de memóriaNo nosso código para listas ligadas, toda vez que:
• Precisamos de um novo nó, fazemos um malloc• Toda vez que removemos um nó, fazemos um free
Alternativa:• Poderíamos alocar muitos nós de uma vez só
– fazendo poucas chamadas para malloc
• Poderíamos esperar para liberar nós no final do programa– Podemos reutilizar esses nós– Diminuímos as chamadas para free e malloc
Como fazer esse controle?• Podemos usar uma lista ligada dos nós não utilizados
• É o que chamamos de lista livre
17
![Page 150: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/150.jpg)
Gerenciamento de memóriaNo nosso código para listas ligadas, toda vez que:
• Precisamos de um novo nó, fazemos um malloc• Toda vez que removemos um nó, fazemos um free
Alternativa:• Poderíamos alocar muitos nós de uma vez só
– fazendo poucas chamadas para malloc
• Poderíamos esperar para liberar nós no final do programa– Podemos reutilizar esses nós– Diminuímos as chamadas para free e malloc
Como fazer esse controle?• Podemos usar uma lista ligada dos nós não utilizados• É o que chamamos de lista livre
17
![Page 151: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/151.jpg)
Lista Livre
Ideia:• Alocamos um grande número de nós de uma só vez
– Colocamos esses nós na lista livre• Quando precisamos de um nó, pegamos da lista livre
– Se faltar nós, alocamos mais um grande número de nós
• Quando liberamos um nó, inserimos ele na lista livre
A lista livre pode armazenar os nós não utilizados de todo oprograma, mesmo que tenhamos várias listas
• não é necessário ter uma lista livre para cada lista ligada
18
![Page 152: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/152.jpg)
Lista Livre
Ideia:• Alocamos um grande número de nós de uma só vez
– Colocamos esses nós na lista livre
• Quando precisamos de um nó, pegamos da lista livre
– Se faltar nós, alocamos mais um grande número de nós
• Quando liberamos um nó, inserimos ele na lista livre
A lista livre pode armazenar os nós não utilizados de todo oprograma, mesmo que tenhamos várias listas
• não é necessário ter uma lista livre para cada lista ligada
18
![Page 153: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/153.jpg)
Lista Livre
Ideia:• Alocamos um grande número de nós de uma só vez
– Colocamos esses nós na lista livre• Quando precisamos de um nó, pegamos da lista livre
– Se faltar nós, alocamos mais um grande número de nós
• Quando liberamos um nó, inserimos ele na lista livre
A lista livre pode armazenar os nós não utilizados de todo oprograma, mesmo que tenhamos várias listas
• não é necessário ter uma lista livre para cada lista ligada
18
![Page 154: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/154.jpg)
Lista Livre
Ideia:• Alocamos um grande número de nós de uma só vez
– Colocamos esses nós na lista livre• Quando precisamos de um nó, pegamos da lista livre
– Se faltar nós, alocamos mais um grande número de nós
• Quando liberamos um nó, inserimos ele na lista livre
A lista livre pode armazenar os nós não utilizados de todo oprograma, mesmo que tenhamos várias listas
• não é necessário ter uma lista livre para cada lista ligada
18
![Page 155: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/155.jpg)
Lista Livre
Ideia:• Alocamos um grande número de nós de uma só vez
– Colocamos esses nós na lista livre• Quando precisamos de um nó, pegamos da lista livre
– Se faltar nós, alocamos mais um grande número de nós
• Quando liberamos um nó, inserimos ele na lista livre
A lista livre pode armazenar os nós não utilizados de todo oprograma, mesmo que tenhamos várias listas
• não é necessário ter uma lista livre para cada lista ligada
18
![Page 156: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/156.jpg)
Lista Livre
Ideia:• Alocamos um grande número de nós de uma só vez
– Colocamos esses nós na lista livre• Quando precisamos de um nó, pegamos da lista livre
– Se faltar nós, alocamos mais um grande número de nós
• Quando liberamos um nó, inserimos ele na lista livre
A lista livre pode armazenar os nós não utilizados de todo oprograma, mesmo que tenhamos várias listas
• não é necessário ter uma lista livre para cada lista ligada
18
![Page 157: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/157.jpg)
Lista Livre
Ideia:• Alocamos um grande número de nós de uma só vez
– Colocamos esses nós na lista livre• Quando precisamos de um nó, pegamos da lista livre
– Se faltar nós, alocamos mais um grande número de nós
• Quando liberamos um nó, inserimos ele na lista livre
A lista livre pode armazenar os nós não utilizados de todo oprograma, mesmo que tenhamos várias listas
• não é necessário ter uma lista livre para cada lista ligada
18
![Page 158: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/158.jpg)
Lista Livre - Alocando um nó1 #define N 100023 p_no lista_livre = NULL;
1 p_no novo_no() {2 int i;3 p_no primeiro;4 if (lista_livre == NULL) {5 lista_livre = malloc(N * sizeof(No));6 for (i = 0; i < N - 1; i++)7 lista_livre[i].prox = &lista_livre[i+1];8 lista_livre[N - 1].prox = NULL;9 }
10 primeiro = lista_livre;11 lista_livre = lista_livre->prox;12 return primeiro;13 }
1 p_no adicionar_elemento(p_no lista, int x) {2 p_no novo;3 novo = novo_no();4 novo->dado = x;5 novo->prox = lista;6 return novo;7 }
19
![Page 159: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/159.jpg)
Lista Livre - Alocando um nó1 #define N 100023 p_no lista_livre = NULL;
1 p_no novo_no() {
2 int i;3 p_no primeiro;4 if (lista_livre == NULL) {5 lista_livre = malloc(N * sizeof(No));6 for (i = 0; i < N - 1; i++)7 lista_livre[i].prox = &lista_livre[i+1];8 lista_livre[N - 1].prox = NULL;9 }
10 primeiro = lista_livre;11 lista_livre = lista_livre->prox;12 return primeiro;13 }
1 p_no adicionar_elemento(p_no lista, int x) {2 p_no novo;3 novo = novo_no();4 novo->dado = x;5 novo->prox = lista;6 return novo;7 }
19
![Page 160: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/160.jpg)
Lista Livre - Alocando um nó1 #define N 100023 p_no lista_livre = NULL;
1 p_no novo_no() {2 int i;3 p_no primeiro;
4 if (lista_livre == NULL) {5 lista_livre = malloc(N * sizeof(No));6 for (i = 0; i < N - 1; i++)7 lista_livre[i].prox = &lista_livre[i+1];8 lista_livre[N - 1].prox = NULL;9 }
10 primeiro = lista_livre;11 lista_livre = lista_livre->prox;12 return primeiro;13 }
1 p_no adicionar_elemento(p_no lista, int x) {2 p_no novo;3 novo = novo_no();4 novo->dado = x;5 novo->prox = lista;6 return novo;7 }
19
![Page 161: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/161.jpg)
Lista Livre - Alocando um nó1 #define N 100023 p_no lista_livre = NULL;
1 p_no novo_no() {2 int i;3 p_no primeiro;4 if (lista_livre == NULL) {
5 lista_livre = malloc(N * sizeof(No));6 for (i = 0; i < N - 1; i++)7 lista_livre[i].prox = &lista_livre[i+1];8 lista_livre[N - 1].prox = NULL;9 }
10 primeiro = lista_livre;11 lista_livre = lista_livre->prox;12 return primeiro;13 }
1 p_no adicionar_elemento(p_no lista, int x) {2 p_no novo;3 novo = novo_no();4 novo->dado = x;5 novo->prox = lista;6 return novo;7 }
19
![Page 162: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/162.jpg)
Lista Livre - Alocando um nó1 #define N 100023 p_no lista_livre = NULL;
1 p_no novo_no() {2 int i;3 p_no primeiro;4 if (lista_livre == NULL) {5 lista_livre = malloc(N * sizeof(No));
6 for (i = 0; i < N - 1; i++)7 lista_livre[i].prox = &lista_livre[i+1];8 lista_livre[N - 1].prox = NULL;9 }
10 primeiro = lista_livre;11 lista_livre = lista_livre->prox;12 return primeiro;13 }
1 p_no adicionar_elemento(p_no lista, int x) {2 p_no novo;3 novo = novo_no();4 novo->dado = x;5 novo->prox = lista;6 return novo;7 }
19
![Page 163: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/163.jpg)
Lista Livre - Alocando um nó1 #define N 100023 p_no lista_livre = NULL;
1 p_no novo_no() {2 int i;3 p_no primeiro;4 if (lista_livre == NULL) {5 lista_livre = malloc(N * sizeof(No));6 for (i = 0; i < N - 1; i++)7 lista_livre[i].prox = &lista_livre[i+1];
8 lista_livre[N - 1].prox = NULL;9 }
10 primeiro = lista_livre;11 lista_livre = lista_livre->prox;12 return primeiro;13 }
1 p_no adicionar_elemento(p_no lista, int x) {2 p_no novo;3 novo = novo_no();4 novo->dado = x;5 novo->prox = lista;6 return novo;7 }
19
![Page 164: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/164.jpg)
Lista Livre - Alocando um nó1 #define N 100023 p_no lista_livre = NULL;
1 p_no novo_no() {2 int i;3 p_no primeiro;4 if (lista_livre == NULL) {5 lista_livre = malloc(N * sizeof(No));6 for (i = 0; i < N - 1; i++)7 lista_livre[i].prox = &lista_livre[i+1];8 lista_livre[N - 1].prox = NULL;
9 }10 primeiro = lista_livre;11 lista_livre = lista_livre->prox;12 return primeiro;13 }
1 p_no adicionar_elemento(p_no lista, int x) {2 p_no novo;3 novo = novo_no();4 novo->dado = x;5 novo->prox = lista;6 return novo;7 }
19
![Page 165: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/165.jpg)
Lista Livre - Alocando um nó1 #define N 100023 p_no lista_livre = NULL;
1 p_no novo_no() {2 int i;3 p_no primeiro;4 if (lista_livre == NULL) {5 lista_livre = malloc(N * sizeof(No));6 for (i = 0; i < N - 1; i++)7 lista_livre[i].prox = &lista_livre[i+1];8 lista_livre[N - 1].prox = NULL;9 }
10 primeiro = lista_livre;
11 lista_livre = lista_livre->prox;12 return primeiro;13 }
1 p_no adicionar_elemento(p_no lista, int x) {2 p_no novo;3 novo = novo_no();4 novo->dado = x;5 novo->prox = lista;6 return novo;7 }
19
![Page 166: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/166.jpg)
Lista Livre - Alocando um nó1 #define N 100023 p_no lista_livre = NULL;
1 p_no novo_no() {2 int i;3 p_no primeiro;4 if (lista_livre == NULL) {5 lista_livre = malloc(N * sizeof(No));6 for (i = 0; i < N - 1; i++)7 lista_livre[i].prox = &lista_livre[i+1];8 lista_livre[N - 1].prox = NULL;9 }
10 primeiro = lista_livre;11 lista_livre = lista_livre->prox;
12 return primeiro;13 }
1 p_no adicionar_elemento(p_no lista, int x) {2 p_no novo;3 novo = novo_no();4 novo->dado = x;5 novo->prox = lista;6 return novo;7 }
19
![Page 167: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/167.jpg)
Lista Livre - Alocando um nó1 #define N 100023 p_no lista_livre = NULL;
1 p_no novo_no() {2 int i;3 p_no primeiro;4 if (lista_livre == NULL) {5 lista_livre = malloc(N * sizeof(No));6 for (i = 0; i < N - 1; i++)7 lista_livre[i].prox = &lista_livre[i+1];8 lista_livre[N - 1].prox = NULL;9 }
10 primeiro = lista_livre;11 lista_livre = lista_livre->prox;12 return primeiro;13 }
1 p_no adicionar_elemento(p_no lista, int x) {2 p_no novo;3 novo = novo_no();4 novo->dado = x;5 novo->prox = lista;6 return novo;7 }
19
![Page 168: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/168.jpg)
Lista Livre - Alocando um nó1 #define N 100023 p_no lista_livre = NULL;
1 p_no novo_no() {2 int i;3 p_no primeiro;4 if (lista_livre == NULL) {5 lista_livre = malloc(N * sizeof(No));6 for (i = 0; i < N - 1; i++)7 lista_livre[i].prox = &lista_livre[i+1];8 lista_livre[N - 1].prox = NULL;9 }
10 primeiro = lista_livre;11 lista_livre = lista_livre->prox;12 return primeiro;13 }
1 p_no adicionar_elemento(p_no lista, int x) {2 p_no novo;3 novo = novo_no();4 novo->dado = x;5 novo->prox = lista;6 return novo;7 }
19
![Page 169: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/169.jpg)
Lista Livre - Liberando um nó
1 void libera_no(p_no no) {2 no->prox = lista_livre;3 lista_livre = no;4 }
1 void destruir_lista_rec(p_no lista) {2 if(lista != NULL) {3 destruir_lista_rec(lista->prox);4 libera_no(lista);5 }6 }
20
![Page 170: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/170.jpg)
Lista Livre - Liberando um nó
1 void libera_no(p_no no) {2 no->prox = lista_livre;3 lista_livre = no;4 }
1 void destruir_lista_rec(p_no lista) {2 if(lista != NULL) {3 destruir_lista_rec(lista->prox);4 libera_no(lista);5 }6 }
20
![Page 171: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/171.jpg)
Lista Livre
Outra opção é:
• se soubermos o número máximo de nós a serem utilizados• podemos alocá-los todos de uma vez só
A implementação apresentada tem um problema:• Não liberamos os blocos de nós alocados• Precisamos dos endereços dos blocos para isso
– Poderíamos ter uma outra lista com esses ponteiros
21
![Page 172: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/172.jpg)
Lista Livre
Outra opção é:• se soubermos o número máximo de nós a serem utilizados
• podemos alocá-los todos de uma vez só
A implementação apresentada tem um problema:• Não liberamos os blocos de nós alocados• Precisamos dos endereços dos blocos para isso
– Poderíamos ter uma outra lista com esses ponteiros
21
![Page 173: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/173.jpg)
Lista Livre
Outra opção é:• se soubermos o número máximo de nós a serem utilizados• podemos alocá-los todos de uma vez só
A implementação apresentada tem um problema:• Não liberamos os blocos de nós alocados• Precisamos dos endereços dos blocos para isso
– Poderíamos ter uma outra lista com esses ponteiros
21
![Page 174: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/174.jpg)
Lista Livre
Outra opção é:• se soubermos o número máximo de nós a serem utilizados• podemos alocá-los todos de uma vez só
A implementação apresentada tem um problema:
• Não liberamos os blocos de nós alocados• Precisamos dos endereços dos blocos para isso
– Poderíamos ter uma outra lista com esses ponteiros
21
![Page 175: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/175.jpg)
Lista Livre
Outra opção é:• se soubermos o número máximo de nós a serem utilizados• podemos alocá-los todos de uma vez só
A implementação apresentada tem um problema:• Não liberamos os blocos de nós alocados
• Precisamos dos endereços dos blocos para isso
– Poderíamos ter uma outra lista com esses ponteiros
21
![Page 176: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/176.jpg)
Lista Livre
Outra opção é:• se soubermos o número máximo de nós a serem utilizados• podemos alocá-los todos de uma vez só
A implementação apresentada tem um problema:• Não liberamos os blocos de nós alocados• Precisamos dos endereços dos blocos para isso
– Poderíamos ter uma outra lista com esses ponteiros
21
![Page 177: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/177.jpg)
Lista Livre
Outra opção é:• se soubermos o número máximo de nós a serem utilizados• podemos alocá-los todos de uma vez só
A implementação apresentada tem um problema:• Não liberamos os blocos de nós alocados• Precisamos dos endereços dos blocos para isso
– Poderíamos ter uma outra lista com esses ponteiros
21
![Page 178: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/178.jpg)
Alocação dinâmica de memória
O malloc faz algo parecido com lista livre, mas é diferente
• precisa lidar com blocos de tamanhos diferentes
Muitas linguagens também fazem free automático• coleta de lixo• Exemplo: contagem de referências
– quantos ponteiros apontam para a célula?– se for zero, podemos liberar a célula
22
![Page 179: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/179.jpg)
Alocação dinâmica de memória
O malloc faz algo parecido com lista livre, mas é diferente• precisa lidar com blocos de tamanhos diferentes
Muitas linguagens também fazem free automático• coleta de lixo• Exemplo: contagem de referências
– quantos ponteiros apontam para a célula?– se for zero, podemos liberar a célula
22
![Page 180: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/180.jpg)
Alocação dinâmica de memória
O malloc faz algo parecido com lista livre, mas é diferente• precisa lidar com blocos de tamanhos diferentes
Muitas linguagens também fazem free automático
• coleta de lixo• Exemplo: contagem de referências
– quantos ponteiros apontam para a célula?– se for zero, podemos liberar a célula
22
![Page 181: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/181.jpg)
Alocação dinâmica de memória
O malloc faz algo parecido com lista livre, mas é diferente• precisa lidar com blocos de tamanhos diferentes
Muitas linguagens também fazem free automático• coleta de lixo
• Exemplo: contagem de referências
– quantos ponteiros apontam para a célula?– se for zero, podemos liberar a célula
22
![Page 182: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/182.jpg)
Alocação dinâmica de memória
O malloc faz algo parecido com lista livre, mas é diferente• precisa lidar com blocos de tamanhos diferentes
Muitas linguagens também fazem free automático• coleta de lixo• Exemplo: contagem de referências
– quantos ponteiros apontam para a célula?– se for zero, podemos liberar a célula
22
![Page 183: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/183.jpg)
Alocação dinâmica de memória
O malloc faz algo parecido com lista livre, mas é diferente• precisa lidar com blocos de tamanhos diferentes
Muitas linguagens também fazem free automático• coleta de lixo• Exemplo: contagem de referências
– quantos ponteiros apontam para a célula?
– se for zero, podemos liberar a célula
22
![Page 184: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/184.jpg)
Alocação dinâmica de memória
O malloc faz algo parecido com lista livre, mas é diferente• precisa lidar com blocos de tamanhos diferentes
Muitas linguagens também fazem free automático• coleta de lixo• Exemplo: contagem de referências
– quantos ponteiros apontam para a célula?– se for zero, podemos liberar a célula
22
![Page 185: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/185.jpg)
Listas GeneralizadasUma lista ligada pode ser definida de forma recursiva:
• ou é uma lista vazia• ou é composta de um elemento seguido de uma lista
Usualmente, o elemento é de um tipo determinado (e.g. int)
Usando union, podemos ter elementos de vários tipos• Uma sequência de bits é interpretada de várias formas• Ex: posso considerar como um int ou como um float
1 typedef union elemento {2 int inteiro;3 float real;4 } elemento;
56 int main() {7 elemento x;8 x.inteiro = 1;9 printf("%d, %f\n", x.inteiro, x.real);
10 x.real = 1;11 printf("%d, %f\n", x.inteiro, x.real);12 }
O que é impresso?1, 0.0000001065353216, 1.000000
23
![Page 186: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/186.jpg)
Listas GeneralizadasUma lista ligada pode ser definida de forma recursiva:
• ou é uma lista vazia
• ou é composta de um elemento seguido de uma lista
Usualmente, o elemento é de um tipo determinado (e.g. int)
Usando union, podemos ter elementos de vários tipos• Uma sequência de bits é interpretada de várias formas• Ex: posso considerar como um int ou como um float
1 typedef union elemento {2 int inteiro;3 float real;4 } elemento;
56 int main() {7 elemento x;8 x.inteiro = 1;9 printf("%d, %f\n", x.inteiro, x.real);
10 x.real = 1;11 printf("%d, %f\n", x.inteiro, x.real);12 }
O que é impresso?1, 0.0000001065353216, 1.000000
23
![Page 187: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/187.jpg)
Listas GeneralizadasUma lista ligada pode ser definida de forma recursiva:
• ou é uma lista vazia• ou é composta de um elemento seguido de uma lista
Usualmente, o elemento é de um tipo determinado (e.g. int)
Usando union, podemos ter elementos de vários tipos• Uma sequência de bits é interpretada de várias formas• Ex: posso considerar como um int ou como um float
1 typedef union elemento {2 int inteiro;3 float real;4 } elemento;
56 int main() {7 elemento x;8 x.inteiro = 1;9 printf("%d, %f\n", x.inteiro, x.real);
10 x.real = 1;11 printf("%d, %f\n", x.inteiro, x.real);12 }
O que é impresso?1, 0.0000001065353216, 1.000000
23
![Page 188: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/188.jpg)
Listas GeneralizadasUma lista ligada pode ser definida de forma recursiva:
• ou é uma lista vazia• ou é composta de um elemento seguido de uma lista
Usualmente, o elemento é de um tipo determinado (e.g. int)
Usando union, podemos ter elementos de vários tipos• Uma sequência de bits é interpretada de várias formas• Ex: posso considerar como um int ou como um float
1 typedef union elemento {2 int inteiro;3 float real;4 } elemento;
56 int main() {7 elemento x;8 x.inteiro = 1;9 printf("%d, %f\n", x.inteiro, x.real);
10 x.real = 1;11 printf("%d, %f\n", x.inteiro, x.real);12 }
O que é impresso?1, 0.0000001065353216, 1.000000
23
![Page 189: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/189.jpg)
Listas GeneralizadasUma lista ligada pode ser definida de forma recursiva:
• ou é uma lista vazia• ou é composta de um elemento seguido de uma lista
Usualmente, o elemento é de um tipo determinado (e.g. int)
Usando union, podemos ter elementos de vários tipos
• Uma sequência de bits é interpretada de várias formas• Ex: posso considerar como um int ou como um float
1 typedef union elemento {2 int inteiro;3 float real;4 } elemento;
56 int main() {7 elemento x;8 x.inteiro = 1;9 printf("%d, %f\n", x.inteiro, x.real);
10 x.real = 1;11 printf("%d, %f\n", x.inteiro, x.real);12 }
O que é impresso?1, 0.0000001065353216, 1.000000
23
![Page 190: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/190.jpg)
Listas GeneralizadasUma lista ligada pode ser definida de forma recursiva:
• ou é uma lista vazia• ou é composta de um elemento seguido de uma lista
Usualmente, o elemento é de um tipo determinado (e.g. int)
Usando union, podemos ter elementos de vários tipos• Uma sequência de bits é interpretada de várias formas
• Ex: posso considerar como um int ou como um float
1 typedef union elemento {2 int inteiro;3 float real;4 } elemento;
56 int main() {7 elemento x;8 x.inteiro = 1;9 printf("%d, %f\n", x.inteiro, x.real);
10 x.real = 1;11 printf("%d, %f\n", x.inteiro, x.real);12 }
O que é impresso?1, 0.0000001065353216, 1.000000
23
![Page 191: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/191.jpg)
Listas GeneralizadasUma lista ligada pode ser definida de forma recursiva:
• ou é uma lista vazia• ou é composta de um elemento seguido de uma lista
Usualmente, o elemento é de um tipo determinado (e.g. int)
Usando union, podemos ter elementos de vários tipos• Uma sequência de bits é interpretada de várias formas• Ex: posso considerar como um int ou como um float
1 typedef union elemento {2 int inteiro;3 float real;4 } elemento;
56 int main() {7 elemento x;8 x.inteiro = 1;9 printf("%d, %f\n", x.inteiro, x.real);
10 x.real = 1;11 printf("%d, %f\n", x.inteiro, x.real);12 }
O que é impresso?1, 0.0000001065353216, 1.000000
23
![Page 192: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/192.jpg)
Listas GeneralizadasUma lista ligada pode ser definida de forma recursiva:
• ou é uma lista vazia• ou é composta de um elemento seguido de uma lista
Usualmente, o elemento é de um tipo determinado (e.g. int)
Usando union, podemos ter elementos de vários tipos• Uma sequência de bits é interpretada de várias formas• Ex: posso considerar como um int ou como um float
1 typedef union elemento {2 int inteiro;3 float real;4 } elemento;
56 int main() {7 elemento x;8 x.inteiro = 1;9 printf("%d, %f\n", x.inteiro, x.real);
10 x.real = 1;11 printf("%d, %f\n", x.inteiro, x.real);12 }
O que é impresso?1, 0.0000001065353216, 1.000000
23
![Page 193: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/193.jpg)
Listas GeneralizadasUma lista ligada pode ser definida de forma recursiva:
• ou é uma lista vazia• ou é composta de um elemento seguido de uma lista
Usualmente, o elemento é de um tipo determinado (e.g. int)
Usando union, podemos ter elementos de vários tipos• Uma sequência de bits é interpretada de várias formas• Ex: posso considerar como um int ou como um float
1 typedef union elemento {2 int inteiro;3 float real;4 } elemento;
56 int main() {7 elemento x;8 x.inteiro = 1;9 printf("%d, %f\n", x.inteiro, x.real);
10 x.real = 1;11 printf("%d, %f\n", x.inteiro, x.real);12 }
O que é impresso?1, 0.0000001065353216, 1.000000
23
![Page 194: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/194.jpg)
Listas GeneralizadasUma lista ligada pode ser definida de forma recursiva:
• ou é uma lista vazia• ou é composta de um elemento seguido de uma lista
Usualmente, o elemento é de um tipo determinado (e.g. int)
Usando union, podemos ter elementos de vários tipos• Uma sequência de bits é interpretada de várias formas• Ex: posso considerar como um int ou como um float
1 typedef union elemento {2 int inteiro;3 float real;4 } elemento;
56 int main() {7 elemento x;8 x.inteiro = 1;9 printf("%d, %f\n", x.inteiro, x.real);
10 x.real = 1;11 printf("%d, %f\n", x.inteiro, x.real);12 }
O que é impresso?1, 0.0000001065353216, 1.000000
23
![Page 195: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/195.jpg)
Listas GeneralizadasUma lista ligada pode ser definida de forma recursiva:
• ou é uma lista vazia• ou é composta de um elemento seguido de uma lista
Usualmente, o elemento é de um tipo determinado (e.g. int)
Usando union, podemos ter elementos de vários tipos• Uma sequência de bits é interpretada de várias formas• Ex: posso considerar como um int ou como um float
1 typedef union elemento {2 int inteiro;3 float real;4 } elemento;56 int main() {7 elemento x;8 x.inteiro = 1;9 printf("%d, %f\n", x.inteiro, x.real);
10 x.real = 1;11 printf("%d, %f\n", x.inteiro, x.real);12 }
O que é impresso?1, 0.0000001065353216, 1.000000
23
![Page 196: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/196.jpg)
Listas GeneralizadasUma lista ligada pode ser definida de forma recursiva:
• ou é uma lista vazia• ou é composta de um elemento seguido de uma lista
Usualmente, o elemento é de um tipo determinado (e.g. int)
Usando union, podemos ter elementos de vários tipos• Uma sequência de bits é interpretada de várias formas• Ex: posso considerar como um int ou como um float
1 typedef union elemento {2 int inteiro;3 float real;4 } elemento;56 int main() {7 elemento x;8 x.inteiro = 1;9 printf("%d, %f\n", x.inteiro, x.real);
10 x.real = 1;11 printf("%d, %f\n", x.inteiro, x.real);12 }
O que é impresso?
1, 0.0000001065353216, 1.000000
23
![Page 197: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/197.jpg)
Listas GeneralizadasUma lista ligada pode ser definida de forma recursiva:
• ou é uma lista vazia• ou é composta de um elemento seguido de uma lista
Usualmente, o elemento é de um tipo determinado (e.g. int)
Usando union, podemos ter elementos de vários tipos• Uma sequência de bits é interpretada de várias formas• Ex: posso considerar como um int ou como um float
1 typedef union elemento {2 int inteiro;3 float real;4 } elemento;56 int main() {7 elemento x;8 x.inteiro = 1;9 printf("%d, %f\n", x.inteiro, x.real);
10 x.real = 1;11 printf("%d, %f\n", x.inteiro, x.real);12 }
O que é impresso?
1, 0.0000001065353216, 1.000000
23
![Page 198: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/198.jpg)
Listas GeneralizadasUma lista ligada pode ser definida de forma recursiva:
• ou é uma lista vazia• ou é composta de um elemento seguido de uma lista
Usualmente, o elemento é de um tipo determinado (e.g. int)
Usando union, podemos ter elementos de vários tipos• Uma sequência de bits é interpretada de várias formas• Ex: posso considerar como um int ou como um float
1 typedef union elemento {2 int inteiro;3 float real;4 } elemento;56 int main() {7 elemento x;8 x.inteiro = 1;9 printf("%d, %f\n", x.inteiro, x.real);
10 x.real = 1;11 printf("%d, %f\n", x.inteiro, x.real);12 }
O que é impresso?1, 0.000000
1065353216, 1.000000
23
![Page 199: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/199.jpg)
Listas GeneralizadasUma lista ligada pode ser definida de forma recursiva:
• ou é uma lista vazia• ou é composta de um elemento seguido de uma lista
Usualmente, o elemento é de um tipo determinado (e.g. int)
Usando union, podemos ter elementos de vários tipos• Uma sequência de bits é interpretada de várias formas• Ex: posso considerar como um int ou como um float
1 typedef union elemento {2 int inteiro;3 float real;4 } elemento;56 int main() {7 elemento x;8 x.inteiro = 1;9 printf("%d, %f\n", x.inteiro, x.real);
10 x.real = 1;11 printf("%d, %f\n", x.inteiro, x.real);12 }
O que é impresso?1, 0.0000001065353216, 1.000000
23
![Page 200: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/200.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP• LISP: LISt Processor
Exemplos:• () - lista vazia• (1, 2, 3, 4) - átomos de mesmo tipo• (1, 'A', 3, 4.5) - átomos de tipos diferentes• (1, (2, 3), 4) - o segundo elemento é uma lista• (1, ('A', 3), 4.5) - o segundo elemento é uma lista• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico– uma lista (2, 3) de dois elementos atômicos
– o terceiro elemento 4 é um átomo
24
![Page 201: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/201.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)
• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP• LISP: LISt Processor
Exemplos:• () - lista vazia• (1, 2, 3, 4) - átomos de mesmo tipo• (1, 'A', 3, 4.5) - átomos de tipos diferentes• (1, (2, 3), 4) - o segundo elemento é uma lista• (1, ('A', 3), 4.5) - o segundo elemento é uma lista• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico– uma lista (2, 3) de dois elementos atômicos
– o terceiro elemento 4 é um átomo
24
![Page 202: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/202.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP• LISP: LISt Processor
Exemplos:• () - lista vazia• (1, 2, 3, 4) - átomos de mesmo tipo• (1, 'A', 3, 4.5) - átomos de tipos diferentes• (1, (2, 3), 4) - o segundo elemento é uma lista• (1, ('A', 3), 4.5) - o segundo elemento é uma lista• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico– uma lista (2, 3) de dois elementos atômicos
– o terceiro elemento 4 é um átomo
24
![Page 203: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/203.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP
• LISP: LISt Processor
Exemplos:• () - lista vazia• (1, 2, 3, 4) - átomos de mesmo tipo• (1, 'A', 3, 4.5) - átomos de tipos diferentes• (1, (2, 3), 4) - o segundo elemento é uma lista• (1, ('A', 3), 4.5) - o segundo elemento é uma lista• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico– uma lista (2, 3) de dois elementos atômicos
– o terceiro elemento 4 é um átomo
24
![Page 204: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/204.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP• LISP: LISt Processor
Exemplos:• () - lista vazia• (1, 2, 3, 4) - átomos de mesmo tipo• (1, 'A', 3, 4.5) - átomos de tipos diferentes• (1, (2, 3), 4) - o segundo elemento é uma lista• (1, ('A', 3), 4.5) - o segundo elemento é uma lista• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico– uma lista (2, 3) de dois elementos atômicos
– o terceiro elemento 4 é um átomo
24
![Page 205: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/205.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP• LISP: LISt Processor
Exemplos:
• () - lista vazia• (1, 2, 3, 4) - átomos de mesmo tipo• (1, 'A', 3, 4.5) - átomos de tipos diferentes• (1, (2, 3), 4) - o segundo elemento é uma lista• (1, ('A', 3), 4.5) - o segundo elemento é uma lista• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico– uma lista (2, 3) de dois elementos atômicos
– o terceiro elemento 4 é um átomo
24
![Page 206: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/206.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP• LISP: LISt Processor
Exemplos:• () - lista vazia
• (1, 2, 3, 4) - átomos de mesmo tipo• (1, 'A', 3, 4.5) - átomos de tipos diferentes• (1, (2, 3), 4) - o segundo elemento é uma lista• (1, ('A', 3), 4.5) - o segundo elemento é uma lista• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico– uma lista (2, 3) de dois elementos atômicos
– o terceiro elemento 4 é um átomo
24
![Page 207: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/207.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP• LISP: LISt Processor
Exemplos:• () - lista vazia• (1, 2, 3, 4) - átomos de mesmo tipo
• (1, 'A', 3, 4.5) - átomos de tipos diferentes• (1, (2, 3), 4) - o segundo elemento é uma lista• (1, ('A', 3), 4.5) - o segundo elemento é uma lista• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico– uma lista (2, 3) de dois elementos atômicos
– o terceiro elemento 4 é um átomo
24
![Page 208: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/208.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP• LISP: LISt Processor
Exemplos:• () - lista vazia• (1, 2, 3, 4) - átomos de mesmo tipo• (1, 'A', 3, 4.5) - átomos de tipos diferentes
• (1, (2, 3), 4) - o segundo elemento é uma lista• (1, ('A', 3), 4.5) - o segundo elemento é uma lista• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico– uma lista (2, 3) de dois elementos atômicos
– o terceiro elemento 4 é um átomo
24
![Page 209: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/209.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP• LISP: LISt Processor
Exemplos:• () - lista vazia• (1, 2, 3, 4) - átomos de mesmo tipo• (1, 'A', 3, 4.5) - átomos de tipos diferentes• (1, (2, 3), 4) - o segundo elemento é uma lista
• (1, ('A', 3), 4.5) - o segundo elemento é uma lista• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico– uma lista (2, 3) de dois elementos atômicos
– o terceiro elemento 4 é um átomo
24
![Page 210: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/210.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP• LISP: LISt Processor
Exemplos:• () - lista vazia• (1, 2, 3, 4) - átomos de mesmo tipo• (1, 'A', 3, 4.5) - átomos de tipos diferentes• (1, (2, 3), 4) - o segundo elemento é uma lista• (1, ('A', 3), 4.5) - o segundo elemento é uma lista
• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico– uma lista (2, 3) de dois elementos atômicos
– o terceiro elemento 4 é um átomo
24
![Page 211: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/211.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP• LISP: LISt Processor
Exemplos:• () - lista vazia• (1, 2, 3, 4) - átomos de mesmo tipo• (1, 'A', 3, 4.5) - átomos de tipos diferentes• (1, (2, 3), 4) - o segundo elemento é uma lista• (1, ('A', 3), 4.5) - o segundo elemento é uma lista• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico– uma lista (2, 3) de dois elementos atômicos
– o terceiro elemento 4 é um átomo
24
![Page 212: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/212.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP• LISP: LISt Processor
Exemplos:• () - lista vazia• (1, 2, 3, 4) - átomos de mesmo tipo• (1, 'A', 3, 4.5) - átomos de tipos diferentes• (1, (2, 3), 4) - o segundo elemento é uma lista• (1, ('A', 3), 4.5) - o segundo elemento é uma lista• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia
– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico– uma lista (2, 3) de dois elementos atômicos
– o terceiro elemento 4 é um átomo
24
![Page 213: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/213.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP• LISP: LISt Processor
Exemplos:• () - lista vazia• (1, 2, 3, 4) - átomos de mesmo tipo• (1, 'A', 3, 4.5) - átomos de tipos diferentes• (1, (2, 3), 4) - o segundo elemento é uma lista• (1, ('A', 3), 4.5) - o segundo elemento é uma lista• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico– uma lista (2, 3) de dois elementos atômicos
– o terceiro elemento 4 é um átomo
24
![Page 214: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/214.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP• LISP: LISt Processor
Exemplos:• () - lista vazia• (1, 2, 3, 4) - átomos de mesmo tipo• (1, 'A', 3, 4.5) - átomos de tipos diferentes• (1, (2, 3), 4) - o segundo elemento é uma lista• (1, ('A', 3), 4.5) - o segundo elemento é uma lista• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico
– uma lista (2, 3) de dois elementos atômicos– o terceiro elemento 4 é um átomo
24
![Page 215: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/215.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP• LISP: LISt Processor
Exemplos:• () - lista vazia• (1, 2, 3, 4) - átomos de mesmo tipo• (1, 'A', 3, 4.5) - átomos de tipos diferentes• (1, (2, 3), 4) - o segundo elemento é uma lista• (1, ('A', 3), 4.5) - o segundo elemento é uma lista• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico– uma lista (2, 3) de dois elementos atômicos
– o terceiro elemento 4 é um átomo
24
![Page 216: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/216.jpg)
Listas GeneralizadasNas listas generalizadas, os elementos da lista podem ser:
• átomos (e.g. int, float, char *)• ou outras listas generalizadas
É a estrutura de dados básica de linguagens como o LISP• LISP: LISt Processor
Exemplos:• () - lista vazia• (1, 2, 3, 4) - átomos de mesmo tipo• (1, 'A', 3, 4.5) - átomos de tipos diferentes• (1, (2, 3), 4) - o segundo elemento é uma lista• (1, ('A', 3), 4.5) - o segundo elemento é uma lista• ((), ((1), (2, 3)), 4) - uma lista com
– o primeiro elemento () é uma lista vazia– o segundo elemento ((1), (2,3)) é uma lista com
– uma lista (1) de um elemento atômico– uma lista (2, 3) de dois elementos atômicos
– o terceiro elemento 4 é um átomo24
![Page 217: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/217.jpg)
Listas Generalizadas - Implementação
1 enum elemento_t {int_t, float_t, char_t, lista_t};23 typedef union elemento {4 int inteiro;5 float real;6 char caracter;7 struct No* lista;8 } elemento;
910 typedef struct No {11 enum elemento_t tipo;12 elemento valor;13 struct No* prox;14 } No;1516 typedef No * p_no;
25
![Page 218: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/218.jpg)
Listas Generalizadas - Implementação
1 enum elemento_t {int_t, float_t, char_t, lista_t};23 typedef union elemento {4 int inteiro;5 float real;6 char caracter;7 struct No* lista;8 } elemento;9
10 typedef struct No {11 enum elemento_t tipo;12 elemento valor;13 struct No* prox;14 } No;1516 typedef No * p_no;
25
![Page 219: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/219.jpg)
Listas Generalizadas - Implementação1 void imprime_rec(p_no lista) {2 if(lista == NULL)3 return;
4 if(lista->tipo == lista_t) {5 printf("(");6 imprime_rec(lista->valor.lista);7 printf(")");8 }9 else if(lista->tipo == int_t)
10 printf("%d", lista->valor.inteiro);11 else if(lista->tipo == float_t)12 printf("%f", lista->valor.real);13 else if(lista->tipo == char_t)14 printf("%c", lista->valor.caracter);15 if(lista->prox != NULL)16 printf(", ");17 imprime_rec(lista->prox);18 }1920 void imprime(p_no lista) {21 printf("(");22 imprime_rec(lista);23 printf(")\n");24 }
26
![Page 220: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/220.jpg)
Listas Generalizadas - Implementação1 void imprime_rec(p_no lista) {2 if(lista == NULL)3 return;4 if(lista->tipo == lista_t) {5 printf("(");6 imprime_rec(lista->valor.lista);7 printf(")");8 }
9 else if(lista->tipo == int_t)10 printf("%d", lista->valor.inteiro);11 else if(lista->tipo == float_t)12 printf("%f", lista->valor.real);13 else if(lista->tipo == char_t)14 printf("%c", lista->valor.caracter);15 if(lista->prox != NULL)16 printf(", ");17 imprime_rec(lista->prox);18 }1920 void imprime(p_no lista) {21 printf("(");22 imprime_rec(lista);23 printf(")\n");24 }
26
![Page 221: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/221.jpg)
Listas Generalizadas - Implementação1 void imprime_rec(p_no lista) {2 if(lista == NULL)3 return;4 if(lista->tipo == lista_t) {5 printf("(");6 imprime_rec(lista->valor.lista);7 printf(")");8 }9 else if(lista->tipo == int_t)
10 printf("%d", lista->valor.inteiro);
11 else if(lista->tipo == float_t)12 printf("%f", lista->valor.real);13 else if(lista->tipo == char_t)14 printf("%c", lista->valor.caracter);15 if(lista->prox != NULL)16 printf(", ");17 imprime_rec(lista->prox);18 }1920 void imprime(p_no lista) {21 printf("(");22 imprime_rec(lista);23 printf(")\n");24 }
26
![Page 222: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/222.jpg)
Listas Generalizadas - Implementação1 void imprime_rec(p_no lista) {2 if(lista == NULL)3 return;4 if(lista->tipo == lista_t) {5 printf("(");6 imprime_rec(lista->valor.lista);7 printf(")");8 }9 else if(lista->tipo == int_t)
10 printf("%d", lista->valor.inteiro);11 else if(lista->tipo == float_t)12 printf("%f", lista->valor.real);
13 else if(lista->tipo == char_t)14 printf("%c", lista->valor.caracter);15 if(lista->prox != NULL)16 printf(", ");17 imprime_rec(lista->prox);18 }1920 void imprime(p_no lista) {21 printf("(");22 imprime_rec(lista);23 printf(")\n");24 }
26
![Page 223: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/223.jpg)
Listas Generalizadas - Implementação1 void imprime_rec(p_no lista) {2 if(lista == NULL)3 return;4 if(lista->tipo == lista_t) {5 printf("(");6 imprime_rec(lista->valor.lista);7 printf(")");8 }9 else if(lista->tipo == int_t)
10 printf("%d", lista->valor.inteiro);11 else if(lista->tipo == float_t)12 printf("%f", lista->valor.real);13 else if(lista->tipo == char_t)14 printf("%c", lista->valor.caracter);
15 if(lista->prox != NULL)16 printf(", ");17 imprime_rec(lista->prox);18 }1920 void imprime(p_no lista) {21 printf("(");22 imprime_rec(lista);23 printf(")\n");24 }
26
![Page 224: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/224.jpg)
Listas Generalizadas - Implementação1 void imprime_rec(p_no lista) {2 if(lista == NULL)3 return;4 if(lista->tipo == lista_t) {5 printf("(");6 imprime_rec(lista->valor.lista);7 printf(")");8 }9 else if(lista->tipo == int_t)
10 printf("%d", lista->valor.inteiro);11 else if(lista->tipo == float_t)12 printf("%f", lista->valor.real);13 else if(lista->tipo == char_t)14 printf("%c", lista->valor.caracter);15 if(lista->prox != NULL)16 printf(", ");17 imprime_rec(lista->prox);18 }
1920 void imprime(p_no lista) {21 printf("(");22 imprime_rec(lista);23 printf(")\n");24 }
26
![Page 225: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/225.jpg)
Listas Generalizadas - Implementação1 void imprime_rec(p_no lista) {2 if(lista == NULL)3 return;4 if(lista->tipo == lista_t) {5 printf("(");6 imprime_rec(lista->valor.lista);7 printf(")");8 }9 else if(lista->tipo == int_t)
10 printf("%d", lista->valor.inteiro);11 else if(lista->tipo == float_t)12 printf("%f", lista->valor.real);13 else if(lista->tipo == char_t)14 printf("%c", lista->valor.caracter);15 if(lista->prox != NULL)16 printf(", ");17 imprime_rec(lista->prox);18 }1920 void imprime(p_no lista) {21 printf("(");22 imprime_rec(lista);23 printf(")\n");24 }
26
![Page 226: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/226.jpg)
Exercício
Represente polinômios utilizando listas ligadas e apresenteuma função que soma dois polinômios.
27
![Page 227: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/227.jpg)
Exercício
Implemente a operação inserir elemento de uma listaduplamente ligada.
28
![Page 228: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/228.jpg)
Exercício
Escreva uma função que devolve a concatenação de duaslistas circulares dadas. Sua função pode destruir a estruturadas listas dadas.
29
![Page 229: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/229.jpg)
Exercício
Escreva uma função que dada uma lista duplamente ligada(sem cabeça) e dois de seus nós, troca os dois nós de lugar nalista.
30
![Page 230: MC-202 — Unidade 7 Operações em listas e variaçõesrafael/cursos/1s2018/mc202/slides/unid… · MC-202—Unidade7 Operaçõesemlistasevariações RafaelC.S.Schouery rafael@ic.unicamp.br](https://reader036.vdocuments.site/reader036/viewer/2022070108/603b7360cd9edb5e4d3700d7/html5/thumbnails/230.jpg)
Exercício
Faça uma função que insere um elemento (atômico ou não) emuma lista generalizada.
31