Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouIasmin Frausto Alterado mais de 10 anos atrás
1
Exemplo: ordenação de uma lista pelo Selection-Sort:
#include <stdio.h> #include <stdlib.h> #include <conio.h> typedef struct noh noh; typedef noh *lista; typedef noh *posicao; struct noh { int elem; noh *prox; }; lista NovaLista (void); void EscreverLista (lista); void OrdenarLista (lista);
2
void main () { lista L; printf ("Leitura de uma lista:\n\n"); L = NovaLista (); printf ("\nLista inicial:"); EscreverLista (L); OrdenarLista (L); printf ("\nLista ordenada:"); printf("\n\nDigite algo para encerrar: "); getch (); }
3
L main void main () { lista L; printf ("Leitura de uma lista:\n\n");
L = NovaLista (); printf ("\nLista inicial:"); EscreverLista (L); OrdenarLista (L); printf ("\nLista ordenada:"); printf("\n\nDigite algo para encerrar: "); getch (); } L ## 45 52 17 19 34 73 main
4
main: OrdenarLista (L);
## 45 52 17 19 34 73 void OrdenarLista (lista L) { posicao p, q, min; int menor; } main: OrdenarLista (L); p q min L menor OrdenarLista Idéia do Método Selection-Sort
5
main: OrdenarLista (L);
## 45 52 17 19 34 73 void OrdenarLista (lista L) { posicao p, q, min; int menor; } main: OrdenarLista (L); q p min q q min q min q q q min L menor 17 19 45 OrdenarLista q->elem < menor é verdade Atualizar menor e min e Avançar q q->elem < menor é falso Avançar q Encontrado o menor elemento do 1º Percurso: 17
6
main: OrdenarLista (L);
void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## 45 52 19 34 73 main: OrdenarLista (L); q p min L menor 17 OrdenarLista Encontrado o menor elemento do 1º Percurso: 17
7
main: OrdenarLista (L);
void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## 17 52 45 19 34 73 main: OrdenarLista (L); q p min L menor 17 OrdenarLista Encontrado o menor elemento do 1º Percurso: 17
8
main: OrdenarLista (L);
void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## 17 52 45 19 34 73 main: OrdenarLista (L); q p p min L menor 17 OrdenarLista Iniciar novo percurso
9
main: OrdenarLista (L);
void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## 17 52 45 19 34 73 main: OrdenarLista (L); q p min q min q min q q L menor 17 19 52 OrdenarLista Encontrado o menor elemento do 2º Percurso: 19
10
main: OrdenarLista (L);
## 17 52 45 34 73 void OrdenarLista (lista L) { posicao p, q, min; int menor; } main: OrdenarLista (L); q p min L menor 19 OrdenarLista Encontrado o menor elemento do 2º Percurso: 19
11
main: OrdenarLista (L);
## 17 19 45 52 34 73 void OrdenarLista (lista L) { posicao p, q, min; int menor; } main: OrdenarLista (L); q p min L menor 19 OrdenarLista Encontrado o menor elemento do 2º Percurso: 19
12
main: OrdenarLista (L);
## 17 19 45 52 34 73 void OrdenarLista (lista L) { posicao p, q, min; int menor; } main: OrdenarLista (L); q p p min L menor 19 OrdenarLista Iniciar novo percurso
13
main: OrdenarLista (L);
## 17 19 45 52 34 73 void OrdenarLista (lista L) { posicao p, q, min; int menor; } main: OrdenarLista (L); q p min q min q min q L menor 34 45 52 19 OrdenarLista Encontrado o menor elemento do 3º Percurso: 34
14
main: OrdenarLista (L);
## 17 19 45 52 73 void OrdenarLista (lista L) { posicao p, q, min; int menor; } main: OrdenarLista (L); q p min L menor 34 OrdenarLista Encontrado o menor elemento do 3º Percurso: 34
15
main: OrdenarLista (L);
## 17 19 45 34 52 73 void OrdenarLista (lista L) { posicao p, q, min; int menor; } main: OrdenarLista (L); q p min L menor 34 OrdenarLista Encontrado o menor elemento do 3º Percurso: 34
16
main: OrdenarLista (L);
## 17 19 45 34 52 73 void OrdenarLista (lista L) { posicao p, q, min; int menor; } main: OrdenarLista (L); q p p min L menor 34 OrdenarLista Iniciar novo percurso
17
main: OrdenarLista (L);
void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## 17 19 45 34 52 73 main: OrdenarLista (L); q p min q min q L menor 45 OrdenarLista Encontrado o menor elemento do 4º Percurso: 45
18
main: OrdenarLista (L);
## 17 19 45 34 52 73 void OrdenarLista (lista L) { posicao p, q, min; int menor; } main: OrdenarLista (L); q p min L menor 45 OrdenarLista p == min: não há troca Encontrado o menor elemento do 4º Percurso: 45
19
main: OrdenarLista (L);
## 17 19 45 34 52 73 void OrdenarLista (lista L) { posicao p, q, min; int menor; } main: OrdenarLista (L); q p min p L menor 45 OrdenarLista Iniciar novo percurso
20
main: OrdenarLista (L);
## 17 19 45 34 52 73 void OrdenarLista (lista L) { posicao p, q, min; int menor; } main: OrdenarLista (L); q min p min min q L menor 52 73 OrdenarLista Encontrado o menor elemento do 5º Percurso: 52
21
main: OrdenarLista (L);
## 17 19 45 34 73 void OrdenarLista (lista L) { posicao p, q, min; int menor; } main: OrdenarLista (L); q p min L menor 52 OrdenarLista Encontrado o menor elemento do 5º Percurso: 52
22
main: OrdenarLista (L);
## 17 19 45 34 73 52 void OrdenarLista (lista L) { posicao p, q, min; int menor; } main: OrdenarLista (L); q p min L menor 52 OrdenarLista Encontrado o menor elemento do 5º Percurso: 52
23
main: OrdenarLista (L);
## 17 19 45 34 73 52 void OrdenarLista (lista L) { posicao p, q, min; int menor; } main: OrdenarLista (L); q p min p L menor 52 OrdenarLista Iniciar novo percurso
24
main: OrdenarLista (L);
## 17 19 45 34 73 52 void OrdenarLista (lista L) { posicao p, q, min; int menor; } main: OrdenarLista (L); q min p L menor 52 OrdenarLista Não há mais elementos a comparar com p->elem: Fim da ordenação
25
L menor 17 45 19 OrdenarLista q p min q q min min
## 45 52 17 19 34 73 void OrdenarLista (lista L) { posicao p, q, min; int menor; for (p = L->prox; p != NULL && p->prox != NULL; p = p->prox) { for (menor = p->elem, min = p, q = p->prox; q != NULL; q = q->prox) { if (q->elem < menor) { menor = q->elem; min = q; } if (min != p) { min->elem = p->elem; p->elem = menor; menor 17 45 19 OrdenarLista q p min q q min min
26
L menor 17 OrdenarLista q p min void OrdenarLista (lista L) {
## 17 52 45 19 34 73 void OrdenarLista (lista L) { posicao p, q, min; int menor; for (p = L->prox; p != NULL && p->prox != NULL; p = p->prox) { for (menor = p->elem, min = p, q = p->prox; q != NULL; q = q->prox) { if (q->elem < menor) { menor = q->elem; min = q; } if (min != p) { min->elem = p->elem; p->elem = menor; menor 17 OrdenarLista q p min
27
Exemplo: inserção e remoção em lista ordenada:
void main () { lista L; printf ("Leitura de uma lista:\n\n"); L = NovaLista (); printf ("\nLista inicial:"); EscreverLista (L); OrdenarLista (L); printf ("\nLista ordenada:"); Inserir (48, L); Remover (52, L); Remover (50, L); printf ("\nLista modificada:"); printf("\n\nDigite algo para encerrar: "); getch (); }
28
main: Inserir (48, L); L p q L 48 num
void Inserir (int num, lista L) { posicao p, q; for (p = L; p->prox != NULL && p->prox->elem < num; p = p->prox); q = p->prox; p->prox = malloc (sizeof(noh)); p->prox->elem = num; p->prox->prox = q; } main: Inserir (48, L); L ## 17 19 45 34 73 52 48 p q L 48 num
29
main: Remover (52, L); L p q L 52 num
void Remover (int num, lista L) { posicao p, q; for (p = L; p->prox != NULL && p->prox->elem < num; p = p->prox); if (p->prox != NULL && p->prox->elem == num) { q = p->prox; p->prox = q->prox; free (q); } main: Remover (52, L); L ## 17 19 45 34 73 52 p q L 52 num
30
A condição do if não é satisfeita:
void Remover (int num, lista L) { posicao p, q; for (p = L; p->prox != NULL && p->prox->elem < num; p = p->prox); if (p->prox != NULL && p->prox->elem == num) { q = p->prox; p->prox = q->prox; free (q); } main: Remover (50, L); L ## 17 19 45 34 73 52 p L 50 num A condição do if não é satisfeita: Não há remoção
31
Exemplo: função para repartir uma lista em outras duas:
Subprograma que receba como argumentos uma lista linear encadeada L, cujos elementos são números inteiros, e mais 2 outras listas de mesma espécie L1, L2, porém vazias; as três listas devem conter seus respectivos nós-líderes O subprograma deve colocar em L1 os nós de L cujos elementos são pares e, em L2, aqueles cujos elementos são ímpares; no final, L deve conter apenas seu nó líder e os últimos nós das 3 listas devem apontar para NULL Nenhum novo nó deve ser criado, nem se deve alterar o conteúdo dos campos que guardam elementos de qualquer nó A ordem dos números em L deve ser mantida em L1 e L2
32
#include <stdio.h>
#include <stdlib.h> #include <conio.h> typedef struct noh noh; typedef noh *lista; typedef noh *posicao; struct noh { int elem; noh *prox; }; void SepararParesImpares (lista, lista, lista);
33
ListPar (main) L (main) ListImpar (main) void main () {
lista L, ListPar, ListImpar; SepararParesImpares (L, ListPar, ListImpar); } ListPar (main) ## L (main) ## 45 52 17 19 34 73 ListImpar (main) ##
34
ListPar (main) L (main) L1 L ListImpar (main) L2
void SepararParesImpares (lista L, lista L1, lista L2) { posicao p, q; ListPar (main) ## L (main) ## 45 52 17 19 34 73 L1 L ListImpar (main) ## L2 main: SepararParesImpares (L, ListPar, ListImpar);
35
ListPar (main) L (main) p L1 q p q q q p L ListImpar (main) q L2
void SepararParesImpares (lista L, lista L1, lista L2) { posicao p, q; ListPar (main) L (main) ## p L1 ## 45 52 19 17 73 34 q p q q q p L ListImpar (main) ## q L2 main: SepararParesImpares (L, ListPar, ListImpar);
36
void SepararParesImpares (lista L, lista L1, lista L2) {
posicao p, q; p = L1; q = L2; while (L->prox != NULL) { if (L->prox->elem % 2 == 0) { p->prox = L->prox; p = p->prox; } else { q->prox = L->prox; q = q->prox; L->prox = L->prox->prox; p->prox = q->prox = NULL;
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.