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

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

Exemplo: ordenação de uma lista pelo Selection-Sort:

Apresentações semelhantes


Apresentação em tema: "Exemplo: ordenação de uma lista pelo Selection-Sort:"— Transcrição da apresentação:

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;


Carregar ppt "Exemplo: ordenação de uma lista pelo Selection-Sort:"

Apresentações semelhantes


Anúncios Google