ces-10 introduÇÃo À computaÇÃo aulas práticas – 2013 capítulo xi encadeamento de estruturas...

41
CES-10 INTRODUÇÃO À CES-10 INTRODUÇÃO À COMPUTAÇÃO COMPUTAÇÃO Aulas Práticas – 2013 Aulas Práticas – 2013 Capítulo XI Capítulo XI Encadeamento de Encadeamento de Estruturas por Estruturas por Ponteiros Ponteiros

Upload: internet

Post on 17-Apr-2015

105 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

CES-10 INTRODUÇÃO CES-10 INTRODUÇÃO À COMPUTAÇÃOÀ COMPUTAÇÃO

Aulas Práticas – 2013Aulas Práticas – 2013

Capítulo XI Capítulo XI

Encadeamento de Encadeamento de Estruturas por Estruturas por

PonteirosPonteiros

Page 2: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Programa 11.1:Programa 11.1: Alocação, preenchimento e Alocação, preenchimento e escrita de uma nova estruturaescrita de uma nova estrutura

#include <stdio.h>#include <stdio.h>

#include <stdlib.h>#include <stdlib.h>

#include <conio.h>#include <conio.h>

typedef struct st st;typedef struct st st;

struct st {int a; st *prox;}; struct st {int a; st *prox;};

void main () {void main () {

st *p;st *p;

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));

p->a = 2;p->a = 2;

printf ("%4d", p->a);printf ("%4d", p->a);

printf ("\n\nDigite algo para encerrar: "); getch();printf ("\n\nDigite algo para encerrar: "); getch();

}}

p? ? ?2

2

Vídeo

Copiar, salvar e executar

a prox

Page 3: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Programa 11.2:Programa 11.2: Alocação, preenchimento e Alocação, preenchimento e escrita de 3 novas estruturas (visto em aula escrita de 3 novas estruturas (visto em aula teórica)teórica)

typedef struct st st;typedef struct st st;

struct st {int a; st *prox;};struct st {int a; st *prox;};

typedef st *pontst;typedef st *pontst;

void main () {void main () {

pontst p, q;pontst p, q;

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));

p->a = 2;p->a = 2;

p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));

p->prox->a = 3;p->prox->a = 3;

p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));

p->prox->prox->a = 5;p->prox->prox->a = 5;

p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;

for (q = p; q != NULL; q = q->prox)for (q = p; q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

printf ("\n\nDigite algo para encerrar: "); getch();printf ("\n\nDigite algo para encerrar: "); getch();

}}

Copiar, salvar e executar

Page 4: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Seja a execução dos comandos:Seja a execução dos comandos:

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));

p->a = 2;p->a = 2;

p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));

p->prox->a = 3;p->prox->a = 3;

p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));

p->prox->prox->a = 5;p->prox->prox->a = 5;

p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;

for (q = p; q != NULL; q = q->prox)for (q = p; q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

Page 5: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));

p->a = 2;p->a = 2;

p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));

p->prox->a = 3;p->prox->a = 3;

p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));

p->prox->prox->a = 5;p->prox->prox->a = 5;

p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;

for (for (q = p; q = p; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

q

Page 6: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));

p->a = 2;p->a = 2;

p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));

p->prox->a = 3;p->prox->a = 3;

p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));

p->prox->prox->a = 5;p->prox->prox->a = 5;

p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;

for (q = p;for (q = p; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

q

2

Vídeo

Page 7: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));

p->a = 2;p->a = 2;

p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));

p->prox->a = 3;p->prox->a = 3;

p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));

p->prox->prox->a = 5;p->prox->prox->a = 5;

p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;

for (q = p;for (q = p; q != NULL; q != NULL; q = q->proxq = q->prox))

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

q

2

Vídeo

q

Page 8: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));

p->a = 2;p->a = 2;

p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));

p->prox->a = 3;p->prox->a = 3;

p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));

p->prox->prox->a = 5;p->prox->prox->a = 5;

p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;

for (q = p;for (q = p; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

2

Vídeo

q

Page 9: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));

p->a = 2;p->a = 2;

p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));

p->prox->a = 3;p->prox->a = 3;

p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));

p->prox->prox->a = 5;p->prox->prox->a = 5;

p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;

for (q = p;for (q = p; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

2 3

Vídeo

q

Page 10: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));

p->a = 2;p->a = 2;

p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));

p->prox->a = 3;p->prox->a = 3;

p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));

p->prox->prox->a = 5;p->prox->prox->a = 5;

p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;

for (q = p;for (q = p; q != NULL; q != NULL; q = q->proxq = q->prox))

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

2 3

Vídeo

q q

Page 11: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));

p->a = 2;p->a = 2;

p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));

p->prox->a = 3;p->prox->a = 3;

p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));

p->prox->prox->a = 5;p->prox->prox->a = 5;

p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;

for (q = p;for (q = p; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

2 3

Vídeo

q

Page 12: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));

p->a = 2;p->a = 2;

p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));

p->prox->a = 3;p->prox->a = 3;

p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));

p->prox->prox->a = 5;p->prox->prox->a = 5;

p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;

for (q = p;for (q = p; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

2 3 5

Vídeo

q

Page 13: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));

p->a = 2;p->a = 2;

p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));

p->prox->a = 3;p->prox->a = 3;

p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));

p->prox->prox->a = 5;p->prox->prox->a = 5;

p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;

for (q = p;for (q = p; q != NULL; q != NULL; q = q->proxq = q->prox))

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

2 3 5

Vídeo

q q

q == NULL:

Fim!!!

Page 14: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Programa 11.3:Programa 11.3: Deixando vazia a primeira Deixando vazia a primeira estrutura (chamando-a de estrutura (chamando-a de estrutura-líderestrutura-líder))

typedef struct st st;typedef struct st st;

struct st {int a; st *prox;};struct st {int a; st *prox;};

typedef st *pontst;typedef st *pontst;

void main () {void main () {

pontst p, q;pontst p, q;

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));

p->a = 2;p->a = 2;

p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));

p->prox->a = 3;p->prox->a = 3;

p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));

p->prox->prox->a = 5;p->prox->prox->a = 5;

p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;

for (for (q = p; q = p; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

printf ("\n\nDigite algo para encerrar: "); getch();printf ("\n\nDigite algo para encerrar: "); getch();

}}

Page 15: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Programa 11.3:Programa 11.3: Deixando vazia a primeira Deixando vazia a primeira estrutura (chamando-a de estrutura (chamando-a de estrutura-líderestrutura-líder))

typedef struct st st;typedef struct st st;

struct st {int a; st *prox;};struct st {int a; st *prox;};

typedef st *pontst;typedef st *pontst;

void main () {void main () {

pontst p, q;pontst p, q;

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));

p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));

p->prox->a = 3;p->prox->a = 3;

p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));

p->prox->prox->a = 5;p->prox->prox->a = 5;

p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;

for (for (q = p->prox; q = p->prox; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

printf ("\n\nDigite algo para encerrar: "); getch();printf ("\n\nDigite algo para encerrar: "); getch();

}}

Copiar, salvar e executar

Page 16: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));

p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));

p->prox->a = 3;p->prox->a = 3;

p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));

p->prox->prox->a = 5;p->prox->prox->a = 5;

p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;

for (q = p->prox;for (q = p->prox; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox

##a prox3

a prox5

3 5

Vídeo

Estrutura-líderEstrutura-líder é útil em muitas operações com encadeamento de estruturas

Page 17: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Programa 11.4:Programa 11.4: Lendo o n Lendo o noo de estruturas e os de estruturas e os valores a serem nelas guardados (mantendo a valores a serem nelas guardados (mantendo a estrutura-líder)estrutura-líder)

#include <stdio.h>#include <stdio.h>

#include <stdlib.h>#include <stdlib.h>

#include <conio.h>#include <conio.h>

/* Declaracoes dos tipos *//* Declaracoes dos tipos */

typedef struct st st;typedef struct st st;

struct st {int a; st *prox;};struct st {int a; st *prox;};

typedef st *pontst;typedef st *pontst;

/* main: cabecalho e declaracoes locais *//* main: cabecalho e declaracoes locais */

void main () {void main () {

int i, n;int i, n;

pontst p, q;pontst p, q;

Page 18: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

/* Alocacao da estrutura-lider *//* Alocacao da estrutura-lider */

p = (pontst) malloc (sizeof(st)); p = (pontst) malloc (sizeof(st));

/* Leitura do numero de estruturas *//* Leitura do numero de estruturas */

printf ("Digite o numero de elementos do encadeamento: ");printf ("Digite o numero de elementos do encadeamento: ");

scanf ("%d", &n);scanf ("%d", &n);

/* Formacao e preenchimento do encadeamento de estruturas *//* Formacao e preenchimento do encadeamento de estruturas */

if (n > 0) {if (n > 0) {

printf ("\nDigite os elementos: ");printf ("\nDigite os elementos: ");

for (q = p, i = 1; i <= n; i++) {for (q = p, i = 1; i <= n; i++) {

q->prox = (pontst) malloc (sizeof (st));q->prox = (pontst) malloc (sizeof (st));

q = q->prox;q = q->prox;

scanf ("%d", &q->a);scanf ("%d", &q->a);

}}

q->prox = NULL;q->prox = NULL;

}}

else p->prox = NULL;else p->prox = NULL;

ni

p

##

Buffer do teclado

3

3

q

1

q

2 5 85 8

2

2

q

8

5

3

q8

4

Page 19: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

/* Escrita do conteudo do encadeamento de estruturas *//* Escrita do conteudo do encadeamento de estruturas */

printf ("\n\nConteudo do encadeamento:\n\n\t");printf ("\n\nConteudo do encadeamento:\n\n\t");

for (q = p->prox; q != NULL; q = q->prox)for (q = p->prox; q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

/* Fechamento da tela e encerramento *//* Fechamento da tela e encerramento */

printf ("\n\nDigite algo para encerrar: "); getch();printf ("\n\nDigite algo para encerrar: "); getch();

}}

ni

p

##

34

2 5 8

q

Copiar, salvar e executar

Page 20: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Programa 11.5:Programa 11.5: Alterando o Alterando o Programa 11.4 Programa 11.4 para que a formação do encadeamento e a para que a formação do encadeamento e a escrita do mesmo fiquem em funções auxiliaresescrita do mesmo fiquem em funções auxiliares

#include <stdio.h>#include <stdio.h>

#include <stdlib.h>#include <stdlib.h>

#include <conio.h>#include <conio.h>

/* Declaracoes dos tipos *//* Declaracoes dos tipos */

typedef struct st st;typedef struct st st;

struct st {int a; st *prox;};struct st {int a; st *prox;};

typedef st *pontst;typedef st *pontst;

/* Declaracoes dos prototipos das funcoes auxiliares *//* Declaracoes dos prototipos das funcoes auxiliares */

pontst NovoEncadeamento (void);pontst NovoEncadeamento (void);

void EscreverEncadeamento (pontst);void EscreverEncadeamento (pontst);

Page 21: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

/* main: cabecalho e declaracoes locais *//* main: cabecalho e declaracoes locais */

void main () {void main () {

pontst x;pontst x;

/* Formacao de um encadeamento *//* Formacao de um encadeamento */

printf ("Formacao de um encadeamento:\n\n");printf ("Formacao de um encadeamento:\n\n");

x = NovoEncadeamento ();x = NovoEncadeamento ();

/* Escrita do conteudo do encadeamento formado *//* Escrita do conteudo do encadeamento formado */

printf ("\nConteudo do encadeamento:\n\n\t");printf ("\nConteudo do encadeamento:\n\n\t");

EscreverEncadeamento (x);EscreverEncadeamento (x);

/* Encerramento *//* Encerramento */

printf ("\n\nDigite algo para encerrar: "); getch();printf ("\n\nDigite algo para encerrar: "); getch();

}}

Page 22: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

/* Funcao NovoEncadeamento: forma um novo encadeamento de/* Funcao NovoEncadeamento: forma um novo encadeamento de

estruturas, preenchendo-o e retornando um ponteiro paraestruturas, preenchendo-o e retornando um ponteiro para

a sua estrutura-lidera sua estrutura-lider */ */

pontst NovoEncadeamento () {pontst NovoEncadeamento () {

int i, n;int i, n;

pontst p, q;pontst p, q;

/* Alocacao da estrutura-lider *//* Alocacao da estrutura-lider */

p = (pontst) malloc (sizeof(st));p = (pontst) malloc (sizeof(st));

/* Leitura do numero de estruturas *//* Leitura do numero de estruturas */

printf ("Digite o numero de elementos do encadeamento: ");printf ("Digite o numero de elementos do encadeamento: ");

scanf ("%d", &n);scanf ("%d", &n);

Page 23: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

/* Formacao e preenchimento do encadeamento de estruturas *//* Formacao e preenchimento do encadeamento de estruturas */

if (n > 0) {if (n > 0) {

printf ("\nDigite os elementos: ");printf ("\nDigite os elementos: ");

for (q = p, i = 1; i <= n; i++) {for (q = p, i = 1; i <= n; i++) {

q->prox = (pontst) malloc (sizeof (st));q->prox = (pontst) malloc (sizeof (st));

q = q->prox;q = q->prox;

scanf ("%d", &q->a);scanf ("%d", &q->a);

}}

q->prox = NULL;q->prox = NULL;

}}

else p->prox = NULL;else p->prox = NULL;

/* Retornando o ponteiro para a estrutura-lider *//* Retornando o ponteiro para a estrutura-lider */

return p;return p;

}}

p

##

2 5 8

Na função main:

x = NovoEncadeamento ();

x(main)

Page 24: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

/* Funcao EscreverEncadeamento: escreve o conteudo/* Funcao EscreverEncadeamento: escreve o conteudo

do encadeamento de estruturas acoplado ao parametro p */do encadeamento de estruturas acoplado ao parametro p */

void EscreverEncadeamento (pontst p){void EscreverEncadeamento (pontst p){

pontst q;pontst q;

for (q = p->prox; q != NULL; q = q->prox)for (q = p->prox; q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

}}

##

2 5 8

x(main

)

Copiar, salvar e executar

Na função main:

EscreverEncadeamento (x);

p

Page 25: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exercício 11.1:Exercício 11.1: Acrescentar ao Acrescentar ao Programa 11.5Programa 11.5 código código para a para a leituraleitura e e escritaescrita de um segundo encadeamento de um segundo encadeamento yy

Exercício 11.2: Exercício 11.2: Eliminação da primeira Eliminação da primeira duplicataduplicata do do primeiro elemento de cada um dos dois primeiro elemento de cada um dos dois encadeamentos encadeamentos

Acrescentar ao programa do Acrescentar ao programa do Exercício 11.1Exercício 11.1 uma uma função para função para deletardeletar de um encadeamento a estrutura de um encadeamento a estrutura com a primeira com a primeira duplicataduplicata do primeiro elemento desse do primeiro elemento desse encadeamentoencadeamento

A função deve receber como A função deve receber como argumentoargumento um um ponteiroponteiro que aponte para a que aponte para a estrutura-líderestrutura-líder do encadeamento- do encadeamento-alvoalvo

A função A função mainmain deve chamar essa função para os deve chamar essa função para os dois dois encadeamentosencadeamentos e mandar e mandar escreverescrever o conteúdo dos o conteúdo dos mesmos, agora sem os elementos mesmos, agora sem os elementos deletadosdeletados

Page 26: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exemplo: simulação da deleção da primeira Exemplo: simulação da deleção da primeira duplicata:duplicata:

Seja o seguinte encadeamento:Seja o seguinte encadeamento:

## 32 17 32 73 32 73

x

p q q

freeFim !!!

Page 27: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exercício 11.3: Exercício 11.3: Eliminação de todas as Eliminação de todas as duplicatasduplicatas do primeiro elemento de cada um do primeiro elemento de cada um dos dois dos dois encadeamentos encadeamentos

Alterar a função do Alterar a função do Exercício 11.2Exercício 11.2 para que ela para que ela deletedelete de um encadeamento todas as estruturas de um encadeamento todas as estruturas com com duplicatasduplicatas do primeiro elemento desse do primeiro elemento desse encadeamentoencadeamento

A função deve receber como A função deve receber como argumentoargumento um um ponteiroponteiro que aponte para a que aponte para a estrutura-líderestrutura-líder do do encadeamento-alvoencadeamento-alvo

A função A função mainmain deve chamar essa função para os deve chamar essa função para os dois encadeamentosdois encadeamentos e mandar e mandar escreverescrever o o conteúdo dos mesmos, agora sem os elementos conteúdo dos mesmos, agora sem os elementos deletadosdeletados

Page 28: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exemplo: simulação da deleção das Exemplo: simulação da deleção das duplicatas do 1º elemento:duplicatas do 1º elemento:

Seja o seguinte encadeamento:Seja o seguinte encadeamento:

## 32 17 32 73 32 73

x

p q q q q

Fim !!!

Não esquecer de dar free nas estruturas deletadas

Page 29: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exercício 11.4: Exercício 11.4: Eliminação de todas as Eliminação de todas as duplicatasduplicatas dos dois dos dois encadeamentos encadeamentos

Alterar a função do Alterar a função do Exercício 11.3Exercício 11.3 para que para que ela ela deletedelete de um encadeamento todas as de um encadeamento todas as estruturas com elementos em estruturas com elementos em duplicata duplicata

A função deve receber como A função deve receber como argumentoargumento um um ponteiroponteiro que aponte para a que aponte para a estrutura-líderestrutura-líder do encadeamento-alvodo encadeamento-alvo

A função A função mainmain deve chamar essa função para deve chamar essa função para os os dois encadeamentosdois encadeamentos e mandar e mandar escreverescrever o o conteúdo dos mesmos, agora sem nenhum conteúdo dos mesmos, agora sem nenhum elemento em elemento em duplicataduplicata

Page 30: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exemplo: simulação de uma eliminação de Exemplo: simulação de uma eliminação de duplicatas:duplicatas:

Seja o seguinte encadeamento:Seja o seguinte encadeamento:

## 32 17 32 73 90 73

x

p q q q qq

Page 31: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exemplo: simulação de uma eliminação de Exemplo: simulação de uma eliminação de duplicatas:duplicatas:

Seja o seguinte encadeamento:Seja o seguinte encadeamento:

## 32 17 73 90 73

x

p q q qq

Page 32: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exemplo: simulação de uma eliminação de Exemplo: simulação de uma eliminação de duplicatas:duplicatas:

Seja o seguinte encadeamento:Seja o seguinte encadeamento:

## 32 17 73 90 73

x

p q q

Page 33: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exemplo: simulação de uma eliminação de Exemplo: simulação de uma eliminação de duplicatas:duplicatas:

Seja o seguinte encadeamento:Seja o seguinte encadeamento:

## 32 17 73 90

x

p q

Fim !!!

Não esquecer de dar free nas estruturas deletadas

Page 34: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exercício 11.5: Conjunto-união e conjunto-Exercício 11.5: Conjunto-união e conjunto-intersecção intersecção

O O Exercício 11.4Exercício 11.4 deixou os dois encadeamentos deixou os dois encadeamentos da função da função mainmain sem duplicatas sem duplicatas

Então esses Então esses encadeamentosencadeamentos podem ser podem ser encarados como encarados como conjuntosconjuntos de números inteiros de números inteiros

Fazer uma função que receba como argumentos Fazer uma função que receba como argumentos doisdois ponteirosponteiros que apontem para as que apontem para as estruturas-líderesestruturas-líderes de dois encadeamentos de dois encadeamentos

Essa função deve transformar o primeiro Essa função deve transformar o primeiro encadeamento no encadeamento no conjunto-uniãoconjunto-união e o segundo e o segundo no no conjunto-intersecção conjunto-intersecção desses argumentosdesses argumentos

Page 35: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exercício 11.5: Conjunto-união e conjunto-Exercício 11.5: Conjunto-união e conjunto-intersecção intersecção

A função A função mainmain deve chamar essa função, deve chamar essa função, passando-lhe como argumentos seus passando-lhe como argumentos seus dois dois encadeamentosencadeamentos lidos, já sem duplicatas lidos, já sem duplicatas

Deve ainda mandar Deve ainda mandar escreverescrever o conteúdo dos o conteúdo dos mesmos, agora mesmos, agora transformadostransformados pela referida pela referida funçãofunção

Nessa nova função, não se deve Nessa nova função, não se deve criarcriar nenhuma nenhuma nova nova estruturaestrutura, nem , nem deixardeixar nenhuma nenhuma estruturaestrutura já existente já existente forafora dos dos encadeamentosencadeamentos, nem , nem trocar o valortrocar o valor guardado guardado em nenhuma em nenhuma estruturaestrutura

Page 36: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exemplo: transformação em união e Exemplo: transformação em união e interseção:interseção:

Sejam os seguintes encadeamentos:Sejam os seguintes encadeamentos:

## 32 17 65 73

x

## 65 84 32 50

y

Page 37: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exemplo: transformação em união e Exemplo: transformação em união e interseção:interseção:

Encadeamentos transformados:Encadeamentos transformados:

## 32 17 65 73

x

## 65 84 32 50

y

Em y, as estruturas com elementos que não constam em x são transferidas para x

Page 38: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exercício 11.6: Circularização e inversão da Exercício 11.6: Circularização e inversão da direção de um encadeamento direção de um encadeamento

Fazer uma função que receba como argumento um Fazer uma função que receba como argumento um ponteiroponteiro que aponte para a que aponte para a estrutura-líderestrutura-líder de de um encadeamentoum encadeamento

Essa função deve: Essa função deve:

Tornar Tornar circularcircular o encadeamento recebido o encadeamento recebido como como argumento argumento

InverterInverter a direção dos a direção dos ponteirosponteiros desse desse encadeamentoencadeamento

Nessa função, não se deve Nessa função, não se deve criarcriar nenhuma nova nenhuma nova estruturaestrutura, nem , nem deixardeixar nenhuma nenhuma estruturaestrutura já já existente existente forafora dos encadeamentosdos encadeamentos, nem , nem trocar o trocar o valorvalor guardado em nenhuma guardado em nenhuma estruturaestrutura

Page 39: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exercício 11.6: Circularização e inversão da Exercício 11.6: Circularização e inversão da direção de um encadeamento direção de um encadeamento

A função A função mainmain deve chamar essa função duas deve chamar essa função duas vezes, fornecendo-lhe como vezes, fornecendo-lhe como argumentoargumento, na , na primeira vez, o encadeamento transformado primeira vez, o encadeamento transformado em em uniãounião dos encadeamentos lidos e, na dos encadeamentos lidos e, na segunda vez, o encadeamento transformado segunda vez, o encadeamento transformado em em intersecçãointersecção dos mesmos dos mesmos

Deve ainda Deve ainda escreverescrever tais encadeamento, agora tais encadeamento, agora circularizadoscircularizados e e invertidosinvertidos

Para essa Para essa escritaescrita, é necessário uma outra , é necessário uma outra função de escreverfunção de escrever o conteúdo de um o conteúdo de um encadeamento, pois não haverá ponteiro encadeamento, pois não haverá ponteiro NULLNULL

Page 40: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exemplo: circularização e inversão de um Exemplo: circularização e inversão de um encadeamento:encadeamento:

Seja o seguinte encadeamento:Seja o seguinte encadeamento:

## 32 17 65 73

x

84 50

Circularizando-o:

Page 41: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros

Exemplo: circularização e inversão de um Exemplo: circularização e inversão de um encadeamento:encadeamento:

Invertendo seu encadeamento:Invertendo seu encadeamento:

## 32 17 65 73

x

84 50