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

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

Filas. #define MAXFILA 100 typedef struct queue { int item [ MAXFILA]; int inic, fim; } fila; fila q;

Apresentações semelhantes


Apresentação em tema: "Filas. #define MAXFILA 100 typedef struct queue { int item [ MAXFILA]; int inic, fim; } fila; fila q;"— Transcrição da apresentação:

1 Filas

2 #define MAXFILA 100 typedef struct queue { int item [ MAXFILA]; int inic, fim; } fila; fila q;

3 Operações sobre uma fila.

4 q.item 4 3 2 1 0 (a) q.inic = 0 q.fim = -1

5 No momento (a) a fila está vazia q.inic=o e q.fim = -1 Quantidade de elementos = q.fim –q.inic+1 Ou seja: -1-0+1=0

6 30 20 10 q.item q.fim = 2 q.inic = 0 (b) 4 3 2 1 0

7 No momento (b) No momento (b) houve a inclusão de 3 elementos - 10, 20 e 30 Quantidade de elementos = q.fim –q.inic+1 Ou seja: 2 – 0 + 1 = 3

8 30 q.item q.inic = q.fim =2 (c) 4 3 2 1 0

9 No momento (c) houve a remoção dos elementos 10 e 20 q.fim = q.inic 30 é o primeiro e o último elemento Quantidade de elementos = q.fim –q.inic+1 Ou seja: 2 – 2 + 1 = 1

10 50 40 30 q.item (d) q.fim = 4 q.inic = 2 4 3 2 1 0

11 No momento (d) existem 4 -2 + 1 =3 Não é possível inserir outros elementos, pois o elemento 50 ocupa a última posição do vetor Existem 2 posições livres Para deslocar os elementos no vetor exige grande esforço computacional X=q.item[0]; For (k=0;k< q.fim; k++) q.item[k]=q.item[k+1]; q.Fim --;

12 Fila circular

13 50 40 30 q.item 4 3 2 1 0 (a) q.fim = 4 q.inic = 2

14 50 40 30 60 q.item (b) q.inic = 2 q.fim = 0 4 3 2 1 0

15 50 60 q.item (c) q.inic = 4 q.fim = 0 4 3 2 1 0

16 50 70 60 q.item (d) q.inic = 4 q.fim = 1 4 3 2 1 0

17 70 60 q.item (e) q.inic = 0 q.fim = 1 4 3 2 1 0

18 Como verificar se a fila está vazia q.inic é o índice do vetor que é exatamente anterior ao primeiro elemento da fila q.fim é o índice do último elemento da fila Se q.inic=q.fim, temos uma fila vazia

19 Ilustração da operação da inserção na fila

20 50 40 30 q.item 4 3 2 1 0 (a) q.inic = 1 q.fim = 4

21 50 40 30 60 q.item (b) q.inic = 1 q.fim = 0 4 3 2 1 0

22 50 40 30 70 60 q.item (c) q.inic = q.fim = 1 4 3 2 1 0

23

24 #define MAXFILA 100 typedef struct queue { int item [ MAXFILA]; int inic, fim; } fila ; Main () fila q;

25 void inicFila (fila *pq) { pq→inic = MAXFILA -1; pq → fim = MAX FILA -1; }

26 int filaVazia (fila *pq) { if(pq →inic==pq →fim) return (1) ; /*1 é verdadeiro* / else return (0) ; / *0 é falso*/ ) /* fim filaVazia*/

27 if (filaVazia (&q)==1) /* tratamento adequado quando a fila está vazia */ else /* tratamento adequado quando a fila não está vazia */

28 int remFila(fila*pq) { if(filaVazia (pq) ){ printf(“Underflow na fila!\n”); exit ( 1) ; } If (pq → inic = = MAXFILA -1 ) pq → inic = 0; else ( pq →inic) ++; return (pq → item [ pq → inic] ) ; } /*fim remove */

29

30 void insFila ( fila *pq, int x) { /*realiza a movimentação para abrir espaço para novo elemento */ if (pq → fim = = MAXFILA – 1) pq → fim = 0 ; else (pq → fim ) ++ ; /*verifica ocorrência de estouro */ if (pq → fim = = pq → inic) { printf (“Ocorreu overflow na fila!\n”); exit ( 1 ) ; } pq → item [ pq → fim] = x; }


Carregar ppt "Filas. #define MAXFILA 100 typedef struct queue { int item [ MAXFILA]; int inic, fim; } fila; fila q;"

Apresentações semelhantes


Anúncios Google