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: #include #include typedef struct noh noh; typedef noh *lista; typedef noh *posicao; struct noh { int.

Apresentações semelhantes


Apresentação em tema: "Exemplo: ordenação de uma lista pelo Selection-Sort: #include #include typedef struct noh noh; typedef noh *lista; typedef noh *posicao; struct noh { int."— Transcrição da apresentação:

1 Exemplo: ordenação de uma lista pelo Selection-Sort: #include #include 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); OrdenarLista (L); printf ("\nLista ordenada:"); EscreverLista (L); printf("\n\nDigite algo para encerrar: "); printf("\n\nDigite algo para encerrar: "); getch (); getch ();}

3 void main () { lista L; printf ("Leitura de uma lista:\n\n"); L = NovaLista (); printf ("\nLista inicial:"); EscreverLista (L); OrdenarLista (L); OrdenarLista (L); printf ("\nLista ordenada:"); EscreverLista (L); printf("\n\nDigite algo para encerrar: "); printf("\n\nDigite algo para encerrar: "); getch (); getch ();} L ## main

4 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor pqmin Idéia do Método Selection-Sort

5 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor p qmin 45 minq q->elem < menor é falso Avançar q q q->elem < menor é verdade Atualizar menor e min e Avançar q 19 minq 17 minqq q Encontrado o menor elemento do 1º Percurso: 17

6 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor p 17 min q Encontrado o menor elemento do 1º Percurso: 17

7 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor p 17 min q Encontrado o menor elemento do 1º Percurso: 17

8 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor p 17 min Iniciar novo percurso p q

9 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor17 min q p 52 minq 19 minqqq Encontrado o menor elemento do 2º Percurso: 19

10 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor q p 19 min Encontrado o menor elemento do 2º Percurso: 19

11 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor q p 19 min Encontrado o menor elemento do 2º Percurso: 19

12 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor q p 19 min Iniciar novo percurso p

13 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor q 5219 minpq 45 minq q 34 min Encontrado o menor elemento do 3º Percurso: 34

14 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor q p 34 min Encontrado o menor elemento do 3º Percurso: 34

15 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor q p 34 min Encontrado o menor elemento do 3º Percurso: 34

16 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor q p 34 min Iniciar novo percurso p

17 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor q 45 min p q q Encontrado o menor elemento do 4º Percurso: 45

18 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor q 45 pmin Encontrado o menor elemento do 4º Percurso: 45 p == min: não há troca

19 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor q 45 pmin Iniciar novo percurso p

20 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor q 73 minp q 52 min Encontrado o menor elemento do 5º Percurso: 52

21 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor q p 52 min Encontrado o menor elemento do 5º Percurso: 52

22 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor q p 52 min Encontrado o menor elemento do 5º Percurso: 52

23 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor q p 52 min Iniciar novo percurso p

24 void OrdenarLista (lista L) { posicao p, q, min; int menor; } L ## main: OrdenarLista (L); OrdenarLista L menor q 52 min p Não há mais elementos a comparar com p->elem : Fim da ordenação

25 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 elem < menor) { menor = q->elem; min = q; }} if (min != p) { min->elem = p->elem; p->elem = menor; }}} L ## OrdenarListamenor p 45 minqq 19 min 17 min q

26 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 elem < menor) { menor = q->elem; min = q; }} if (min != p) { min->elem = p->elem; p->elem = menor; }}} L ## OrdenarLista menor p q min 17

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); OrdenarLista (L); printf ("\nLista ordenada:"); EscreverLista (L); Inserir (48, L); Inserir (48, L); Remover (52, L); Remover (50, L); Remover (50, L); printf ("\nLista modificada:"); EscreverLista (L); printf("\n\nDigite algo para encerrar: "); printf("\n\nDigite algo para encerrar: "); getch (); getch ();}

28 void Inserir (int num, lista L) { posicao p, q; for (p = L; p->prox != NULL && p->prox->elem 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; } L ## main: Inserir (48, L); L 48 num pq 48

29 void Remover (int num, lista L) { posicao p, q; for (p = L; p->prox != NULL && p->prox->elem 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); free (q);}} L ## main: Remover (52, L); L 52 num pq

30 void Remover (int num, lista L) { posicao p, q; for (p = L; p->prox != NULL && p->prox->elem 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); free (q);}} L ## main: Remover (50, L); L 50 num p 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 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 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ó 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 A ordem dos números em L deve ser mantida em L1 e L2

32 #include #include typedef struct noh noh; typedef noh *lista; typedef noh *posicao; struct noh { int elem; noh *prox; }; void SepararParesImpares (lista, lista, lista);

33 void main () { lista L, ListPar, ListImpar; SepararParesImpares (L, ListPar, ListImpar); SepararParesImpares (L, ListPar, ListImpar); } L (main) ## ListPar (main) ## ListImpar (main) ##

34 void SepararParesImpares (lista L, lista L1, lista L2) { posicao p, q; L (main) ## ListPar (main) ## ListImpar (main) ## main: SepararParesImpares (L, ListPar, ListImpar); L1 L L2

35 void SepararParesImpares (lista L, lista L1, lista L2) { posicao p, q; L (main) ## ListPar (main) ## ListImpar (main) ## main: SepararParesImpares (L, ListPar, ListImpar); L1 L2 pq q L p qqq p

36 void SepararParesImpares (lista L, lista L1, lista L2) { posicao p, q; p = L1; q = L2; p = L1; q = L2; while (L->prox != NULL) { while (L->prox != NULL) { if (L->prox->elem % 2 == 0) { if (L->prox->elem % 2 == 0) { p->prox = L->prox; p->prox = L->prox; p = p->prox; p = p->prox; } else { else { q->prox = L->prox; q->prox = L->prox; q = q->prox; q = q->prox; } L->prox = L->prox->prox; L->prox = L->prox->prox; } p->prox = q->prox = NULL; p->prox = q->prox = NULL;}


Carregar ppt "Exemplo: ordenação de uma lista pelo Selection-Sort: #include #include typedef struct noh noh; typedef noh *lista; typedef noh *posicao; struct noh { int."

Apresentações semelhantes


Anúncios Google