a); printf ("\n\nDigite algo para encerrar: "); getch(); } Copiar, salvar e executar">

A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros."— Transcrição da apresentação:

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

2 Programa 11.1: Alocação, preenchimento e escrita de uma nova estrutura #include #include typedef struct st st; struct st {int a; st *prox;}; void main () { st *p; st *p; p = (st *) malloc (sizeof(st)); p->a = 2; 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 aprox

3 Programa 11.2: Alocação, preenchimento e escrita de 3 novas estruturas (visto em aula teórica) typedef struct st st; struct st {int a; st *prox;}; typedef st *pontst; void main () { pontst p, q; p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); printf ("\n\nDigite algo para encerrar: "); getch(); } Copiar, salvar e executar

4 Seja a execução dos comandos: Seja a execução dos comandos: p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a 5

5 p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a 5 q

6 p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a 5 q 2 Vídeo

7 p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a 5 q 2 Vídeo q

8 p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a 5 2 Vídeo q

9 p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a Vídeo q

10 p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a Vídeo qq

11 p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a Vídeo q

12 p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a Vídeo q

13 p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a Vídeo q q q == NULL: Fim!!!

14 Programa 11.3: Deixando vazia a primeira estrutura (chamando- a de estrutura-líder) typedef struct st st; struct st {int a; st *prox;}; typedef st *pontst; void main () { pontst p, q; p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); printf ("\n\nDigite algo para encerrar: "); getch(); }

15 Programa 11.3: Deixando vazia a primeira estrutura (chamando- a de estrutura-líder) typedef struct st st; struct st {int a; st *prox;}; typedef st *pontst; void main () { pontst p, q; p = (st *) malloc (sizeof(st)); p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p->prox; q != NULL; q = q->prox) printf ("%4d", q->a); printf ("\n\nDigite algo para encerrar: "); getch(); } Copiar, salvar e executar

16 p = (st *) malloc (sizeof(st)); p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p->prox; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox ## aprox 3 a Vídeo Estrutura-líder Estrutura-líder é útil em muitas operações com encadeamento de estruturas

17 Programa 11.4: Lendo o n o de estruturas e os valores a serem nelas guardados (mantendo a estrutura-líder) #include #include /* Declaracoes dos tipos */ typedef struct st st; struct st {int a; st *prox;}; typedef st *pontst; /* main: cabecalho e declaracoes locais */ void main () { int i, n; pontst p, q; pontst p, q;

18 /* Alocacao da estrutura-lider */ p = (pontst) malloc (sizeof(st)); p = (pontst) malloc (sizeof(st)); /* Leitura do numero de estruturas */ printf ("Digite o numero de elementos do encadeamento: "); scanf ("%d", &n); /* Formacao e preenchimento do encadeamento de estruturas */ if (n > 0) { if (n > 0) { printf ("\nDigite os elementos: "); for (q = p, i = 1; i <= n; i++) { q->prox = (pontst) malloc (sizeof (st)); q = q->prox; scanf ("%d", &q->a); } q->prox = NULL; } else p->prox = NULL; ni p ## Buffer do teclado 3 3 q 1 q q q 8 4

19 /* 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) printf ("%4d", q->a); /* Fechamento da tela e encerramento */ printf ("\n\nDigite algo para encerrar: "); getch(); printf ("\n\nDigite algo para encerrar: "); getch();} ni p ## q Copiar, salvar e executar

20 Programa 11.5: Alterando o Programa 11.4 para que a formação do encadeamento e a escrita do mesmo fiquem em funções auxiliares #include #include /* Declaracoes dos tipos */ typedef struct st st; struct st {int a; st *prox;}; typedef st *pontst; /* Declaracoes dos prototipos das funcoes auxiliares */ pontst NovoEncadeamento (void); void EscreverEncadeamento (pontst);

21 /* main: cabecalho e declaracoes locais */ void main () { pontst x; pontst x; /* 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 */ printf ("\nConteudo do encadeamento:\n\n\t"); printf ("\nConteudo do encadeamento:\n\n\t"); EscreverEncadeamento (x); EscreverEncadeamento (x); /* Encerramento */ printf ("\n\nDigite algo para encerrar: "); getch(); printf ("\n\nDigite algo para encerrar: "); getch();}

22 /* Funcao NovoEncadeamento: forma um novo encadeamento de estruturas, preenchendo-o e retornando um ponteiro para a sua estrutura-lider */ a sua estrutura-lider */ pontst NovoEncadeamento () { int i, n; pontst p, q; pontst p, q; /* Alocacao da estrutura-lider */ p = (pontst) malloc (sizeof(st)); p = (pontst) malloc (sizeof(st)); /* Leitura do numero de estruturas */ printf ("Digite o numero de elementos do encadeamento: "); scanf ("%d", &n);

23 /* Formacao e preenchimento do encadeamento de estruturas */ if (n > 0) { if (n > 0) { printf ("\nDigite os elementos: "); for (q = p, i = 1; i <= n; i++) { q->prox = (pontst) malloc (sizeof (st)); q = q->prox; scanf ("%d", &q->a); } q->prox = NULL; } else p->prox = NULL; /* Retornando o ponteiro para a estrutura-lider */ return p; } p ##258 Na função main: x = NovoEncadeamento (); x (main)

24 /* Funcao EscreverEncadeamento: escreve o conteudo do encadeamento de estruturas acoplado ao parametro p */ void EscreverEncadeamento (pontst p){ pontst q; for (q = p->prox; q != NULL; q = q->prox) printf ("%4d", q->a); } ##258 x (main) Copiar, salvar e executar Na função main: EscreverEncadeamento (x); p

25 Exercício 11.1: Acrescentar ao Programa 11.5 código para a leitura e escrita de um segundo encadeamento y Exercício 11.2: Eliminação da primeira duplicata do primeiro elemento de cada um dos dois encadeamentos Acrescentar ao programa do Exercício 11.1 uma função para deletar de um encadeamento a estrutura com a primeira duplicata do primeiro elemento desse encadeamento Acrescentar ao programa do Exercício 11.1 uma função para deletar de um encadeamento a estrutura com a primeira duplicata do primeiro elemento desse encadeamento A função deve receber como argumento um ponteiro que aponte para a estrutura-líder do encadeamento-alvo A função deve receber como argumento um ponteiro que aponte para a estrutura-líder do encadeamento-alvo A função main deve chamar essa função para os dois encadeamentos e mandar escrever o conteúdo dos mesmos, agora sem os elementos deletados A função main deve chamar essa função para os dois encadeamentos e mandar escrever o conteúdo dos mesmos, agora sem os elementos deletados

26 Exemplo: simulação da deleção da primeira duplicata: Seja o seguinte encadeamento: Seja o seguinte encadeamento: ## x pqq free Fim !!!

27 Exercício 11.3: Eliminação de todas as duplicatas do primeiro elemento de cada um dos dois encadeamentos Alterar a função do Exercício 11.2 para que ela delete de um encadeamento todas as estruturas com duplicatas do primeiro elemento desse encadeamento Alterar a função do Exercício 11.2 para que ela delete de um encadeamento todas as estruturas com duplicatas do primeiro elemento desse encadeamento A função deve receber como argumento um ponteiro que aponte para a estrutura-líder do encadeamento-alvo A função deve receber como argumento um ponteiro que aponte para a estrutura-líder do encadeamento-alvo A função main deve chamar essa função para os dois encadeamentos e mandar escrever o conteúdo dos mesmos, agora sem os elementos deletados A função main deve chamar essa função para os dois encadeamentos e mandar escrever o conteúdo dos mesmos, agora sem os elementos deletados

28 Exemplo: simulação da deleção das duplicatas do 1º elemento: Seja o seguinte encadeamento: Seja o seguinte encadeamento: ## x pqqqq Fim !!! Não esquecer de dar free nas estruturas deletadas

29 Exercício 11.4: Eliminação de todas as duplicatas dos dois encadeamentos Alterar a função do Exercício 11.3 para que ela delete de um encadeamento todas as estruturas com elementos em duplicata Alterar a função do Exercício 11.3 para que ela delete de um encadeamento todas as estruturas com elementos em duplicata A função deve receber como argumento um ponteiro que aponte para a estrutura-líder do encadeamento-alvo A função deve receber como argumento um ponteiro que aponte para a estrutura-líder do encadeamento-alvo A função main deve chamar essa função para os dois encadeamentos e mandar escrever o conteúdo dos mesmos, agora sem nenhum elemento em duplicata A função main deve chamar essa função para os dois encadeamentos e mandar escrever o conteúdo dos mesmos, agora sem nenhum elemento em duplicata

30 Exemplo: simulação de uma eliminação de duplicatas: Seja o seguinte encadeamento: Seja o seguinte encadeamento: ## x pqqqq q

31 Exemplo: simulação de uma eliminação de duplicatas: Seja o seguinte encadeamento: Seja o seguinte encadeamento: ## x pqqq q

32 Exemplo: simulação de uma eliminação de duplicatas: Seja o seguinte encadeamento: Seja o seguinte encadeamento: ## x pqq

33 Exemplo: simulação de uma eliminação de duplicatas: Seja o seguinte encadeamento: Seja o seguinte encadeamento: ## x pq Fim !!! Não esquecer de dar free nas estruturas deletadas

34 Exercício 11.5: Conjunto-união e conjunto-intersecção O Exercício 11.4 deixou os dois encadeamentos da função main sem duplicatas O Exercício 11.4 deixou os dois encadeamentos da função main sem duplicatas Então esses encadeamentos podem ser encarados como conjuntos de números inteiros Então esses encadeamentos podem ser encarados como conjuntos de números inteiros Fazer uma função que receba como argumentos dois ponteiros que apontem para as estruturas-líderes de dois encadeamentos Fazer uma função que receba como argumentos dois ponteiros que apontem para as estruturas-líderes de dois encadeamentos Essa função deve transformar o primeiro encadeamento no conjunto-união e o segundo no conjunto-intersecção desses argumentos Essa função deve transformar o primeiro encadeamento no conjunto-união e o segundo no conjunto-intersecção desses argumentos

35 Exercício 11.5: Conjunto-união e conjunto-intersecção A função main deve chamar essa função, passando-lhe como argumentos seus dois encadeamentos lidos, já sem duplicatas A função main deve chamar essa função, passando-lhe como argumentos seus dois encadeamentos lidos, já sem duplicatas Deve ainda mandar escrever o conteúdo dos mesmos, agora transformados pela referida função Deve ainda mandar escrever o conteúdo dos mesmos, agora transformados pela referida função Nessa nova função, não se deve criar nenhuma nova estrutura, nem deixar nenhuma estrutura já existente fora dos encadeamentos, nem trocar o valor guardado em nenhuma estrutura Nessa nova função, não se deve criar nenhuma nova estrutura, nem deixar nenhuma estrutura já existente fora dos encadeamentos, nem trocar o valor guardado em nenhuma estrutura

36 Exemplo: transformação em união e interseção: Sejam os seguintes encadeamentos: Sejam os seguintes encadeamentos: ## x ## y

37 Exemplo: transformação em união e interseção: Encadeamentos transformados: Encadeamentos transformados: ## x ## y Em y, as estruturas com elementos que não constam em x são transferidas para x

38 Exercício 11.6: Circularização e inversão da direção de um encadeamento Fazer uma função que receba como argumento um ponteiro que aponte para a estrutura-líder de um encadeamento Fazer uma função que receba como argumento um ponteiro que aponte para a estrutura-líder de um encadeamento Essa função deve: Essa função deve: Tornar circular o encadeamento recebido como argumento Tornar circular o encadeamento recebido como argumento Inverter a direção dos ponteiros desse encadeamento Inverter a direção dos ponteiros desse encadeamento Nessa função, não se deve criar nenhuma nova estrutura, nem deixar nenhuma estrutura já existente fora dos encadeamentos, nem trocar o valor guardado em nenhuma estrutura Nessa função, não se deve criar nenhuma nova estrutura, nem deixar nenhuma estrutura já existente fora dos encadeamentos, nem trocar o valor guardado em nenhuma estrutura

39 Exercício 11.6: Circularização e inversão da direção de um encadeamento A função main deve chamar essa função duas vezes, fornecendo-lhe como argumento, na primeira vez, o encadeamento transformado em união dos encadeamentos lidos e, na segunda vez, o encadeamento transformado em intersecção dos mesmos A função main deve chamar essa função duas vezes, fornecendo-lhe como argumento, na primeira vez, o encadeamento transformado em união dos encadeamentos lidos e, na segunda vez, o encadeamento transformado em intersecção dos mesmos Deve ainda escrever tais encadeamento, agora circularizados e invertidos Deve ainda escrever tais encadeamento, agora circularizados e invertidos Para essa escrita, é necessário uma outra função de escrever o conteúdo de um encadeamento, pois não haverá ponteiro NULL Para essa escrita, é necessário uma outra função de escrever o conteúdo de um encadeamento, pois não haverá ponteiro NULL

40 Exemplo: circularização e inversão de um encadeamento: Seja o seguinte encadeamento: ## x 8450 Circularizando-o:

41 Exemplo: circularização e inversão de um encadeamento: Invertendo seu encadeamento: ## x 8450


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

Apresentações semelhantes


Anúncios Google