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

30
Filas

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

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

Filas

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

#define MAXFILA 100typedef struct queue {

int item [ MAXFILA];int inic, fim;

} fila;

fila q;

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

Operações sobre uma fila.

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

q.item

4

3

2

1

0

(a)

q.inic = 0

q.fim = -1

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

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

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

30

20

10

q.item

q.fim = 2

q.inic = 0

(b)

4

3

2

1

0

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

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

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

30

q.item

q.inic = q.fim =2

(c)

4

3

2

1

0

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

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

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

50

40

30

q.item

(d)

q.fim = 4

q.inic = 2

4

3

2

1

0

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

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 --;

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

Fila circular

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

50

40

30

q.item

4

3

2

1

0

(a)

q.fim = 4

q.inic = 2

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

50

40

30

60

q.item

(b)

q.inic = 2

q.fim = 0

4

3

2

1

0

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

50

60

q.item

(c)

q.inic = 4

q.fim = 0

4

3

2

1

0

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

50

70

60

q.item

(d)

q.inic = 4

q.fim = 1

4

3

2

1

0

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

70

60

q.item

(e)

q.inic = 0

q.fim = 1

4

3

2

1

0

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

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

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

Ilustração da operação da inserção

na fila

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

50

40

30

q.item

4

3

2

1

0

(a)

q.inic = 1

q.fim = 4

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

50

40

30

60

q.item

(b)

q.inic = 1

q.fim = 0

4

3

2

1

0

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

50

40

30

70

60

q.item

(c)

q.inic = q.fim = 1

4

3

2

1

0

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

#define MAXFILA 100

typedef struct queue {

int item [ MAXFILA];

int inic, fim;

} fila ;

Main ()

fila q;

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

void inicFila (fila *pq)

{

pq→inic = MAXFILA -1;

pq→fim = MAX FILA -1;

}

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

int filaVazia (fila *pq)

{

if(pq →inic==pq →fim)

return (1) ; /*1 é verdadeiro* /

else

return (0) ; / *0 é falso*/

) /* fim filaVazia*/

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

if (filaVazia (&q)==1)

/* tratamento adequado quando a fila está vazia*/

else

/* tratamento adequado quando a fila não está vazia*/

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

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 */

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

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;

}