149
MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery [email protected] Universidade Estadual de Campinas 1º semestre/2017

MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery [email protected] Universidade

  • Upload
    haliem

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

MC-202 — Unidade 7Filas e Pilhas

Rafael C. S. [email protected]

Universidade Estadual de Campinas

1º semestre/2017

Page 2: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Filas

• Uma impressora é compartilhada em um laboratório• Alunos enviam documentos quase ao mesmo tempo

Como gerenciar a lista de tarefas de impressão?

2

Page 3: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Filas

• Uma impressora é compartilhada em um laboratório• Alunos enviam documentos quase ao mesmo tempo

Como gerenciar a lista de tarefas de impressão?

2

Page 4: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Coleções dinâmicas

São coleções variáveis de objetos guardados em umaestrutura de dados com operações inserir e remover um objeto

Fila:• Remove primeiro objetos inseridos há mais tempo• FIFO (first-infirst-out): primeiro a entrar é primeiro a sair

3

Page 5: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Coleções dinâmicas

São coleções variáveis de objetos guardados em umaestrutura de dados com operações inserir e remover um objeto

Fila:

• Remove primeiro objetos inseridos há mais tempo• FIFO (first-infirst-out): primeiro a entrar é primeiro a sair

3

Page 6: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Coleções dinâmicas

São coleções variáveis de objetos guardados em umaestrutura de dados com operações inserir e remover um objeto

Fila:• Remove primeiro objetos inseridos há mais tempo

• FIFO (first-infirst-out): primeiro a entrar é primeiro a sair

3

Page 7: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Coleções dinâmicas

São coleções variáveis de objetos guardados em umaestrutura de dados com operações inserir e remover um objeto

Fila:• Remove primeiro objetos inseridos há mais tempo• FIFO (first-infirst-out): primeiro a entrar é primeiro a sair

3

Page 8: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

FilaOperações:

• Enfileira (queue): adiciona item no “fim”• Desenfileira (dequeue): remove item do “início”

Exemplo:

4

Page 9: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

FilaOperações:

• Enfileira (queue): adiciona item no “fim”

• Desenfileira (dequeue): remove item do “início”

Exemplo:

4

Page 10: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

FilaOperações:

• Enfileira (queue): adiciona item no “fim”• Desenfileira (dequeue): remove item do “início”

Exemplo:

4

Page 11: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

FilaOperações:

• Enfileira (queue): adiciona item no “fim”• Desenfileira (dequeue): remove item do “início”

Exemplo:

4

Page 12: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

FilaOperações:

• Enfileira (queue): adiciona item no “fim”• Desenfileira (dequeue): remove item do “início”

Exemplo: Enfileira( )

4

Page 13: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

FilaOperações:

• Enfileira (queue): adiciona item no “fim”• Desenfileira (dequeue): remove item do “início”

Exemplo: Enfileira( )

4

Page 14: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

FilaOperações:

• Enfileira (queue): adiciona item no “fim”• Desenfileira (dequeue): remove item do “início”

Exemplo: Enfileira( )

4

Page 15: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

FilaOperações:

• Enfileira (queue): adiciona item no “fim”• Desenfileira (dequeue): remove item do “início”

Exemplo: Enfileira( )

4

Page 16: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

FilaOperações:

• Enfileira (queue): adiciona item no “fim”• Desenfileira (dequeue): remove item do “início”

Exemplo: Desenfileira()

4

Page 17: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

FilaOperações:

• Enfileira (queue): adiciona item no “fim”• Desenfileira (dequeue): remove item do “início”

Exemplo: Desenfileira()

4

Page 18: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

FilaOperações:

• Enfileira (queue): adiciona item no “fim”• Desenfileira (dequeue): remove item do “início”

Exemplo: Enfileira( )

4

Page 19: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

FilaOperações:

• Enfileira (queue): adiciona item no “fim”• Desenfileira (dequeue): remove item do “início”

Exemplo: Enfileira( )

4

Page 20: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

FilaOperações:

• Enfileira (queue): adiciona item no “fim”• Desenfileira (dequeue): remove item do “início”

Exemplo: Enfileira( )

4

Page 21: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

FilaOperações:

• Enfileira (queue): adiciona item no “fim”• Desenfileira (dequeue): remove item do “início”

Exemplo: Enfileira( )

4

Page 22: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

FilaOperações:

• Enfileira (queue): adiciona item no “fim”• Desenfileira (dequeue): remove item do “início”

Exemplo: Desenfileira()

4

Page 23: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

FilaOperações:

• Enfileira (queue): adiciona item no “fim”• Desenfileira (dequeue): remove item do “início”

Exemplo: Desenfileira()

4

Page 24: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 typedef struct {2 No *ini, *fim;3 } Fila;

5

Page 25: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 typedef struct {2 No *ini, *fim;3 } Fila;

5

Page 26: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 typedef struct {2 No *ini, *fim;3 } Fila;

5

Page 27: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 typedef struct {2 No *ini, *fim;3 } Fila;

5

Page 28: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 void inicializar_fila(Fila *f) {

2 f->ini = NULL;3 f->fim = NULL;4 }

6

Page 29: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 void inicializar_fila(Fila *f) {

2 f->ini = NULL;3 f->fim = NULL;4 }

6

Page 30: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 void inicializar_fila(Fila *f) {2 f->ini = NULL;3 f->fim = NULL;4 }

6

Page 31: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 void enfileira(Fila *f, int x) {

2 No *novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = NULL;6 if (f->ini == NULL)7 f->ini = novo;8 else9 f->fim->prox = novo;

10 f->fim = novo;11 }

7

Page 32: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 void enfileira(Fila *f, int x) {

2 No *novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = NULL;6 if (f->ini == NULL)7 f->ini = novo;8 else9 f->fim->prox = novo;

10 f->fim = novo;11 }

7

Page 33: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 void enfileira(Fila *f, int x) {2 No *novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = NULL;

6 if (f->ini == NULL)7 f->ini = novo;8 else9 f->fim->prox = novo;

10 f->fim = novo;11 }

7

Page 34: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 void enfileira(Fila *f, int x) {2 No *novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = NULL;6 if (f->ini == NULL)7 f->ini = novo;

8 else9 f->fim->prox = novo;

10 f->fim = novo;11 }

7

Page 35: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 void enfileira(Fila *f, int x) {2 No *novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = NULL;6 if (f->ini == NULL)7 f->ini = novo;8 else9 f->fim->prox = novo;

10 f->fim = novo;11 }

7

Page 36: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 void enfileira(Fila *f, int x) {2 No *novo;3 novo = malloc(sizeof(No));4 novo->dado = x;5 novo->prox = NULL;6 if (f->ini == NULL)7 f->ini = novo;8 else9 f->fim->prox = novo;

10 f->fim = novo;11 }

7

Page 37: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 int desenfileira(Fila *f) {

2 No *primeiro = f->ini;3 int x = primeiro->dado;4 f->ini = f->ini->prox;5 if (f->ini == NULL)6 f->fim = NULL;7 free(primeiro);8 return x;9 }

8

Page 38: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 int desenfileira(Fila *f) {

2 No *primeiro = f->ini;3 int x = primeiro->dado;4 f->ini = f->ini->prox;5 if (f->ini == NULL)6 f->fim = NULL;7 free(primeiro);8 return x;9 }

8

Page 39: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 int desenfileira(Fila *f) {2 No *primeiro = f->ini;

3 int x = primeiro->dado;4 f->ini = f->ini->prox;5 if (f->ini == NULL)6 f->fim = NULL;7 free(primeiro);8 return x;9 }

8

Page 40: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 int desenfileira(Fila *f) {2 No *primeiro = f->ini;3 int x = primeiro->dado;

4 f->ini = f->ini->prox;5 if (f->ini == NULL)6 f->fim = NULL;7 free(primeiro);8 return x;9 }

8

Page 41: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 int desenfileira(Fila *f) {2 No *primeiro = f->ini;3 int x = primeiro->dado;4 f->ini = f->ini->prox;

5 if (f->ini == NULL)6 f->fim = NULL;7 free(primeiro);8 return x;9 }

8

Page 42: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 int desenfileira(Fila *f) {2 No *primeiro = f->ini;3 int x = primeiro->dado;4 f->ini = f->ini->prox;5 if (f->ini == NULL)6 f->fim = NULL;7 free(primeiro);

8 return x;9 }

8

Page 43: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada

ini fim

A B C D

1 int desenfileira(Fila *f) {2 No *primeiro = f->ini;3 int x = primeiro->dado;4 f->ini = f->ini->prox;5 if (f->ini == NULL)6 f->fim = NULL;7 free(primeiro);8 return x;9 }

8

Page 44: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada (outra opção)fim

A B C D

Inserção:• Atualizar o campo prox de fim• Mudar fim para apontar para o novo nó

Remoção:• Basta remover o nó seguinte ao nó dummy

– i.e., fim->prox->prox

Exercício: implemente em C essa versão de fila

9

Page 45: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada (outra opção)fim

A B C D

Inserção:

• Atualizar o campo prox de fim• Mudar fim para apontar para o novo nó

Remoção:• Basta remover o nó seguinte ao nó dummy

– i.e., fim->prox->prox

Exercício: implemente em C essa versão de fila

9

Page 46: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada (outra opção)fim

A B C D

Inserção:• Atualizar o campo prox de fim

• Mudar fim para apontar para o novo nó

Remoção:• Basta remover o nó seguinte ao nó dummy

– i.e., fim->prox->prox

Exercício: implemente em C essa versão de fila

9

Page 47: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada (outra opção)fim

A B C D

Inserção:• Atualizar o campo prox de fim• Mudar fim para apontar para o novo nó

Remoção:• Basta remover o nó seguinte ao nó dummy

– i.e., fim->prox->prox

Exercício: implemente em C essa versão de fila

9

Page 48: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada (outra opção)fim

A B C D

Inserção:• Atualizar o campo prox de fim• Mudar fim para apontar para o novo nó

Remoção:

• Basta remover o nó seguinte ao nó dummy

– i.e., fim->prox->prox

Exercício: implemente em C essa versão de fila

9

Page 49: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada (outra opção)fim

A B C D

Inserção:• Atualizar o campo prox de fim• Mudar fim para apontar para o novo nó

Remoção:• Basta remover o nó seguinte ao nó dummy

– i.e., fim->prox->prox

Exercício: implemente em C essa versão de fila

9

Page 50: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada (outra opção)fim

A B C D

Inserção:• Atualizar o campo prox de fim• Mudar fim para apontar para o novo nó

Remoção:• Basta remover o nó seguinte ao nó dummy

– i.e., fim->prox->prox

Exercício: implemente em C essa versão de fila

9

Page 51: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com lista ligada (outra opção)fim

A B C D

Inserção:• Atualizar o campo prox de fim• Mudar fim para apontar para o novo nó

Remoção:• Basta remover o nó seguinte ao nó dummy

– i.e., fim->prox->prox

Exercício: implemente em C essa versão de fila9

Page 52: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com vetorPrimeira ideia:

• Inserimos no final do vetor: O(1)• Removemos do começo do vetor: O(n)

Segunda ideia:• Variável ini indica o começa da fila• Variável fim indica o fim da fila

A B C D

ini fim

E se, ao inserir, tivermos espaço apenas à esquerda de ini?• podemos mover toda a fila para o começo do vetor• mas isso leva tempo O(n)...

10

Page 53: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com vetorPrimeira ideia:

• Inserimos no final do vetor: O(1)

• Removemos do começo do vetor: O(n)

Segunda ideia:• Variável ini indica o começa da fila• Variável fim indica o fim da fila

A B C D

ini fim

E se, ao inserir, tivermos espaço apenas à esquerda de ini?• podemos mover toda a fila para o começo do vetor• mas isso leva tempo O(n)...

10

Page 54: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com vetorPrimeira ideia:

• Inserimos no final do vetor: O(1)• Removemos do começo do vetor: O(n)

Segunda ideia:• Variável ini indica o começa da fila• Variável fim indica o fim da fila

A B C D

ini fim

E se, ao inserir, tivermos espaço apenas à esquerda de ini?• podemos mover toda a fila para o começo do vetor• mas isso leva tempo O(n)...

10

Page 55: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com vetorPrimeira ideia:

• Inserimos no final do vetor: O(1)• Removemos do começo do vetor: O(n)

Segunda ideia:

• Variável ini indica o começa da fila• Variável fim indica o fim da fila

A B C D

ini fim

E se, ao inserir, tivermos espaço apenas à esquerda de ini?• podemos mover toda a fila para o começo do vetor• mas isso leva tempo O(n)...

10

Page 56: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com vetorPrimeira ideia:

• Inserimos no final do vetor: O(1)• Removemos do começo do vetor: O(n)

Segunda ideia:• Variável ini indica o começa da fila

• Variável fim indica o fim da fila

A B C D

ini fim

E se, ao inserir, tivermos espaço apenas à esquerda de ini?• podemos mover toda a fila para o começo do vetor• mas isso leva tempo O(n)...

10

Page 57: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com vetorPrimeira ideia:

• Inserimos no final do vetor: O(1)• Removemos do começo do vetor: O(n)

Segunda ideia:• Variável ini indica o começa da fila• Variável fim indica o fim da fila

A B C D

ini fim

E se, ao inserir, tivermos espaço apenas à esquerda de ini?• podemos mover toda a fila para o começo do vetor• mas isso leva tempo O(n)...

10

Page 58: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com vetorPrimeira ideia:

• Inserimos no final do vetor: O(1)• Removemos do começo do vetor: O(n)

Segunda ideia:• Variável ini indica o começa da fila• Variável fim indica o fim da fila

A B C D

ini fim

E se, ao inserir, tivermos espaço apenas à esquerda de ini?• podemos mover toda a fila para o começo do vetor• mas isso leva tempo O(n)...

10

Page 59: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com vetorPrimeira ideia:

• Inserimos no final do vetor: O(1)• Removemos do começo do vetor: O(n)

Segunda ideia:• Variável ini indica o começa da fila• Variável fim indica o fim da fila

A B C D

ini fim

E se, ao inserir, tivermos espaço apenas à esquerda de ini?

• podemos mover toda a fila para o começo do vetor• mas isso leva tempo O(n)...

10

Page 60: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com vetorPrimeira ideia:

• Inserimos no final do vetor: O(1)• Removemos do começo do vetor: O(n)

Segunda ideia:• Variável ini indica o começa da fila• Variável fim indica o fim da fila

A B C D

ini fim

E se, ao inserir, tivermos espaço apenas à esquerda de ini?• podemos mover toda a fila para o começo do vetor

• mas isso leva tempo O(n)...

10

Page 61: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com vetorPrimeira ideia:

• Inserimos no final do vetor: O(1)• Removemos do começo do vetor: O(n)

Segunda ideia:• Variável ini indica o começa da fila• Variável fim indica o fim da fila

A B C D

ini fim

E se, ao inserir, tivermos espaço apenas à esquerda de ini?• podemos mover toda a fila para o começo do vetor• mas isso leva tempo O(n)...

10

Page 62: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com vetor (fila circular)

Solução: considerar o vetor de tamanho N de maneira circular

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

As manipulações de índices são realizadas módulo N

11

Page 63: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com vetor (fila circular)

Solução: considerar o vetor de tamanho N de maneira circular

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

As manipulações de índices são realizadas módulo N

11

Page 64: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila: implementação com vetor (fila circular)

Solução: considerar o vetor de tamanho N de maneira circular

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

As manipulações de índices são realizadas módulo N

11

Page 65: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Estrutura

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

ini = 8

fim = 2

N = 10

tamanho = 4

1 typedef struct {2 int *v;3 int ini, fim, N, tamanho;4 } Fila;

12

Page 66: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Estrutura

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

ini = 8

fim = 2

N = 10

tamanho = 4

1 typedef struct {2 int *v;3 int ini, fim, N, tamanho;4 } Fila;

vetor para armazenar os dados

12

Page 67: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Estrutura

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

ini = 8

fim = 2

N = 10

tamanho = 4

1 typedef struct {2 int *v;3 int ini, fim, N, tamanho;4 } Fila;

início da fila (posição da próxima remoção)

12

Page 68: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Estrutura

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

ini = 8

fim = 2

N = 10

tamanho = 4

1 typedef struct {2 int *v;3 int ini, fim, N, tamanho;4 } Fila;

fim da fila (posição da próxima inserção)

12

Page 69: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Estrutura

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

ini = 8

fim = 2

N = 10

tamanho = 4

1 typedef struct {2 int *v;3 int ini, fim, N, tamanho;4 } Fila;

tamanho do vetor alocado

12

Page 70: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Estrutura

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

ini = 8

fim = 2

N = 10

tamanho = 4

1 typedef struct {2 int *v;3 int ini, fim, N, tamanho;4 } Fila;

tamanho da fila (número de elementos)

12

Page 71: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Inicializar

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

ini = 8

fim = 2

N = 10

tamanho = 4

1 void inicializar_fila(Fila *f, int N) {

2 f->v = malloc(N*sizeof(int));3 f->ini = 0;4 f->fim = 0;5 f->N = N;6 f->tamanho = 0;7 }

13

Page 72: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Inicializar

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

ini = 8

fim = 2

N = 10

tamanho = 4

1 void inicializar_fila(Fila *f, int N) {2 f->v = malloc(N*sizeof(int));3 f->ini = 0;4 f->fim = 0;5 f->N = N;6 f->tamanho = 0;7 }

13

Page 73: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Inserção

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

ini = 8

fim = 2

N = 10

tamanho = 4

1 void enfileira(Fila *f, int x) {

2 f->v[f->fim] = x;3 f->fim = (f->fim + 1) % f->N;4 (f->tamanho)++;5 }

14

Page 74: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Inserção

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

ini = 8

fim = 2

N = 10

tamanho = 4

1 void enfileira(Fila *f, int x) {2 f->v[f->fim] = x;

3 f->fim = (f->fim + 1) % f->N;4 (f->tamanho)++;5 }

14

Page 75: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Inserção

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

Eini = 8

fim = 2

N = 10

tamanho = 4

1 void enfileira(Fila *f, int x) {2 f->v[f->fim] = x;

3 f->fim = (f->fim + 1) % f->N;4 (f->tamanho)++;5 }

14

Page 76: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Inserção

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

Eini = 8

fim = 2

N = 10

tamanho = 4

1 void enfileira(Fila *f, int x) {2 f->v[f->fim] = x;3 f->fim = (f->fim + 1) % f->N;

4 (f->tamanho)++;5 }

14

Page 77: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Inserção

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

Eini = 8

fim = 3

N = 10

tamanho = 4

1 void enfileira(Fila *f, int x) {2 f->v[f->fim] = x;3 f->fim = (f->fim + 1) % f->N;

4 (f->tamanho)++;5 }

14

Page 78: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Inserção

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

Eini = 8

fim = 2

N = 10

tamanho = 4

1 void enfileira(Fila *f, int x) {2 f->v[f->fim] = x;3 f->fim = (f->fim + 1) % f->N;4 (f->tamanho)++;5 }

14

Page 79: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Inserção

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

Eini = 8

fim = 2

N = 10

tamanho = 4

1 void enfileira(Fila *f, int x) {2 f->v[f->fim] = x;3 f->fim = (f->fim + 1) % f->N;4 (f->tamanho)++;5 }

14

Page 80: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Inserção

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

Eini = 8

fim = 2

N = 10

tamanho = 4

1 void enfileira(Fila *f, int x) {2 f->v[f->fim] = x;3 f->fim = (f->fim + 1) % f->N;4 (f->tamanho)++;5 }

14

Page 81: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Inserção

C

v[0]

D

v[1]

v[2]

v[3]

v[4]

v[5]

v[6]

v[7]

Av[8]

B

v[9]

Eini = 8

fim = 2

N = 10

tamanho = 5

1 void enfileira(Fila *f, int x) {2 f->v[f->fim] = x;3 f->fim = (f->fim + 1) % f->N;4 (f->tamanho)++;5 }

14

Page 82: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Remoção

C

v[0]

D

v[1]

Ev[2]

v[3]

v[4]

v[5]

v[6]

v[7]

v[8]

B

v[9]

Aini = 8

fim = 3

N = 10

tamanho = 5

1 int desenfileira(Fila *f) {

2 int x = f->v[f->ini];3 f->ini = (f->ini + 1) % f->N;4 (f->tamanho)--;5 return x;6 }

15

Page 83: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Remoção

C

v[0]

D

v[1]

Ev[2]

v[3]

v[4]

v[5]

v[6]

v[7]

v[8]

B

v[9]

Aini = 8

fim = 3

N = 10

tamanho = 5

1 int desenfileira(Fila *f) {2 int x = f->v[f->ini];

3 f->ini = (f->ini + 1) % f->N;4 (f->tamanho)--;5 return x;6 }

15

Page 84: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Remoção

C

v[0]

D

v[1]

Ev[2]

v[3]

v[4]

v[5]

v[6]

v[7]

v[8]

B

v[9]

Aini = 8

fim = 3

N = 10

tamanho = 5

x = A

1 int desenfileira(Fila *f) {2 int x = f->v[f->ini];

3 f->ini = (f->ini + 1) % f->N;4 (f->tamanho)--;5 return x;6 }

15

Page 85: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Remoção

C

v[0]

D

v[1]

Ev[2]

v[3]

v[4]

v[5]

v[6]

v[7]

v[8]

B

v[9]

Aini = 8

fim = 3

N = 10

tamanho = 5

x = A

1 int desenfileira(Fila *f) {2 int x = f->v[f->ini];3 f->ini = (f->ini + 1) % f->N;

4 (f->tamanho)--;5 return x;6 }

15

Page 86: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Remoção

C

v[0]

D

v[1]

Ev[2]

v[3]

v[4]

v[5]

v[6]

v[7]

v[8]

B

v[9]

ini = 9

fim = 3

N = 10

tamanho = 5

x = A

1 int desenfileira(Fila *f) {2 int x = f->v[f->ini];3 f->ini = (f->ini + 1) % f->N;

4 (f->tamanho)--;5 return x;6 }

15

Page 87: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Remoção

C

v[0]

D

v[1]

Ev[2]

v[3]

v[4]

v[5]

v[6]

v[7]

v[8]

B

v[9]

ini = 9

fim = 3

N = 10

tamanho = 5

x = A

1 int desenfileira(Fila *f) {2 int x = f->v[f->ini];3 f->ini = (f->ini + 1) % f->N;4 (f->tamanho)--;

5 return x;6 }

15

Page 88: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Remoção

C

v[0]

D

v[1]

Ev[2]

v[3]

v[4]

v[5]

v[6]

v[7]

v[8]

B

v[9]

ini = 9

fim = 3

N = 10

tamanho = 4

x = A

1 int desenfileira(Fila *f) {2 int x = f->v[f->ini];3 f->ini = (f->ini + 1) % f->N;4 (f->tamanho)--;

5 return x;6 }

15

Page 89: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Fila circular - Remoção

C

v[0]

D

v[1]

Ev[2]

v[3]

v[4]

v[5]

v[6]

v[7]

v[8]

B

v[9]

ini = 9

fim = 3

N = 10

tamanho = 4

x = A

1 int desenfileira(Fila *f) {2 int x = f->v[f->ini];3 f->ini = (f->ini + 1) % f->N;4 (f->tamanho)--;5 return x;6 }

15

Page 90: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Um cliente simples

1 int main() {2 int n, x, i;3 Fila f;4 inicializar_fila(&f, 100);5 scanf("%d", &n);6 for (i = 0; i < n; i++) {7 scanf("%d", &x);8 enfileira(&f, x);9 }

10 while(!fila_vazia(f)) {11 x = desenfileira(&f);12 printf("%d ", x);13 }14 printf("\n");15 return 0;16 }

Qual é o problema do código acima?• E se n for maior do que 100?• Poderíamos usar listas ligadas...• Ou aumentar o tamanho do vetor alocado

16

Page 91: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Um cliente simples1 int main() {2 int n, x, i;3 Fila f;

4 inicializar_fila(&f, 100);5 scanf("%d", &n);6 for (i = 0; i < n; i++) {7 scanf("%d", &x);8 enfileira(&f, x);9 }

10 while(!fila_vazia(f)) {11 x = desenfileira(&f);12 printf("%d ", x);13 }14 printf("\n");15 return 0;16 }

Qual é o problema do código acima?• E se n for maior do que 100?• Poderíamos usar listas ligadas...• Ou aumentar o tamanho do vetor alocado

16

Page 92: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Um cliente simples1 int main() {2 int n, x, i;3 Fila f;4 inicializar_fila(&f, 100);

5 scanf("%d", &n);6 for (i = 0; i < n; i++) {7 scanf("%d", &x);8 enfileira(&f, x);9 }

10 while(!fila_vazia(f)) {11 x = desenfileira(&f);12 printf("%d ", x);13 }14 printf("\n");15 return 0;16 }

Qual é o problema do código acima?• E se n for maior do que 100?• Poderíamos usar listas ligadas...• Ou aumentar o tamanho do vetor alocado

16

Page 93: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Um cliente simples1 int main() {2 int n, x, i;3 Fila f;4 inicializar_fila(&f, 100);5 scanf("%d", &n);

6 for (i = 0; i < n; i++) {7 scanf("%d", &x);8 enfileira(&f, x);9 }

10 while(!fila_vazia(f)) {11 x = desenfileira(&f);12 printf("%d ", x);13 }14 printf("\n");15 return 0;16 }

Qual é o problema do código acima?• E se n for maior do que 100?• Poderíamos usar listas ligadas...• Ou aumentar o tamanho do vetor alocado

16

Page 94: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Um cliente simples1 int main() {2 int n, x, i;3 Fila f;4 inicializar_fila(&f, 100);5 scanf("%d", &n);6 for (i = 0; i < n; i++) {7 scanf("%d", &x);

8 enfileira(&f, x);9 }

10 while(!fila_vazia(f)) {11 x = desenfileira(&f);12 printf("%d ", x);13 }14 printf("\n");15 return 0;16 }

Qual é o problema do código acima?• E se n for maior do que 100?• Poderíamos usar listas ligadas...• Ou aumentar o tamanho do vetor alocado

16

Page 95: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Um cliente simples1 int main() {2 int n, x, i;3 Fila f;4 inicializar_fila(&f, 100);5 scanf("%d", &n);6 for (i = 0; i < n; i++) {7 scanf("%d", &x);8 enfileira(&f, x);

9 }10 while(!fila_vazia(f)) {11 x = desenfileira(&f);12 printf("%d ", x);13 }14 printf("\n");15 return 0;16 }

Qual é o problema do código acima?• E se n for maior do que 100?• Poderíamos usar listas ligadas...• Ou aumentar o tamanho do vetor alocado

16

Page 96: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Um cliente simples1 int main() {2 int n, x, i;3 Fila f;4 inicializar_fila(&f, 100);5 scanf("%d", &n);6 for (i = 0; i < n; i++) {7 scanf("%d", &x);8 enfileira(&f, x);9 }

10 while(!fila_vazia(f)) {

11 x = desenfileira(&f);12 printf("%d ", x);13 }14 printf("\n");15 return 0;16 }

Qual é o problema do código acima?• E se n for maior do que 100?• Poderíamos usar listas ligadas...• Ou aumentar o tamanho do vetor alocado

16

Page 97: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Um cliente simples1 int main() {2 int n, x, i;3 Fila f;4 inicializar_fila(&f, 100);5 scanf("%d", &n);6 for (i = 0; i < n; i++) {7 scanf("%d", &x);8 enfileira(&f, x);9 }

10 while(!fila_vazia(f)) {11 x = desenfileira(&f);

12 printf("%d ", x);13 }14 printf("\n");15 return 0;16 }

Qual é o problema do código acima?• E se n for maior do que 100?• Poderíamos usar listas ligadas...• Ou aumentar o tamanho do vetor alocado

16

Page 98: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Um cliente simples1 int main() {2 int n, x, i;3 Fila f;4 inicializar_fila(&f, 100);5 scanf("%d", &n);6 for (i = 0; i < n; i++) {7 scanf("%d", &x);8 enfileira(&f, x);9 }

10 while(!fila_vazia(f)) {11 x = desenfileira(&f);12 printf("%d ", x);13 }14 printf("\n");15 return 0;16 }

Qual é o problema do código acima?• E se n for maior do que 100?• Poderíamos usar listas ligadas...• Ou aumentar o tamanho do vetor alocado

16

Page 99: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Um cliente simples1 int main() {2 int n, x, i;3 Fila f;4 inicializar_fila(&f, 100);5 scanf("%d", &n);6 for (i = 0; i < n; i++) {7 scanf("%d", &x);8 enfileira(&f, x);9 }

10 while(!fila_vazia(f)) {11 x = desenfileira(&f);12 printf("%d ", x);13 }14 printf("\n");15 return 0;16 }

Qual é o problema do código acima?

• E se n for maior do que 100?• Poderíamos usar listas ligadas...• Ou aumentar o tamanho do vetor alocado

16

Page 100: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Um cliente simples1 int main() {2 int n, x, i;3 Fila f;4 inicializar_fila(&f, 100);5 scanf("%d", &n);6 for (i = 0; i < n; i++) {7 scanf("%d", &x);8 enfileira(&f, x);9 }

10 while(!fila_vazia(f)) {11 x = desenfileira(&f);12 printf("%d ", x);13 }14 printf("\n");15 return 0;16 }

Qual é o problema do código acima?• E se n for maior do que 100?

• Poderíamos usar listas ligadas...• Ou aumentar o tamanho do vetor alocado

16

Page 101: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Um cliente simples1 int main() {2 int n, x, i;3 Fila f;4 inicializar_fila(&f, 100);5 scanf("%d", &n);6 for (i = 0; i < n; i++) {7 scanf("%d", &x);8 enfileira(&f, x);9 }

10 while(!fila_vazia(f)) {11 x = desenfileira(&f);12 printf("%d ", x);13 }14 printf("\n");15 return 0;16 }

Qual é o problema do código acima?• E se n for maior do que 100?• Poderíamos usar listas ligadas...

• Ou aumentar o tamanho do vetor alocado

16

Page 102: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Um cliente simples1 int main() {2 int n, x, i;3 Fila f;4 inicializar_fila(&f, 100);5 scanf("%d", &n);6 for (i = 0; i < n; i++) {7 scanf("%d", &x);8 enfileira(&f, x);9 }

10 while(!fila_vazia(f)) {11 x = desenfileira(&f);12 printf("%d ", x);13 }14 printf("\n");15 return 0;16 }

Qual é o problema do código acima?• E se n for maior do que 100?• Poderíamos usar listas ligadas...• Ou aumentar o tamanho do vetor alocado

16

Page 103: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Exemplos de aplicações

Algumas aplicações de filas:

• Gerenciamento de fila de impressão• Buffer do teclado• Escalonamento de processos• Comunicação entre aplicativos/computadores• Percurso de estruturas de dados complexas (grafos etc.)

17

Page 104: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Exemplos de aplicações

Algumas aplicações de filas:• Gerenciamento de fila de impressão

• Buffer do teclado• Escalonamento de processos• Comunicação entre aplicativos/computadores• Percurso de estruturas de dados complexas (grafos etc.)

17

Page 105: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Exemplos de aplicações

Algumas aplicações de filas:• Gerenciamento de fila de impressão• Buffer do teclado

• Escalonamento de processos• Comunicação entre aplicativos/computadores• Percurso de estruturas de dados complexas (grafos etc.)

17

Page 106: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Exemplos de aplicações

Algumas aplicações de filas:• Gerenciamento de fila de impressão• Buffer do teclado• Escalonamento de processos

• Comunicação entre aplicativos/computadores• Percurso de estruturas de dados complexas (grafos etc.)

17

Page 107: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Exemplos de aplicações

Algumas aplicações de filas:• Gerenciamento de fila de impressão• Buffer do teclado• Escalonamento de processos• Comunicação entre aplicativos/computadores

• Percurso de estruturas de dados complexas (grafos etc.)

17

Page 108: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Exemplos de aplicações

Algumas aplicações de filas:• Gerenciamento de fila de impressão• Buffer do teclado• Escalonamento de processos• Comunicação entre aplicativos/computadores• Percurso de estruturas de dados complexas (grafos etc.)

17

Page 109: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Pilha• Remove primeiro objetos inseridos há menos tempo

• LIFO (last-infirst-out): último a entrar é primeiro a sair

É como uma pilha de pratos:• Empilha os pratos limpos sobre os que já estão na pilha• Desempilha o prato de cima para usar

18

Page 110: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Pilha• Remove primeiro objetos inseridos há menos tempo• LIFO (last-infirst-out): último a entrar é primeiro a sair

É como uma pilha de pratos:• Empilha os pratos limpos sobre os que já estão na pilha• Desempilha o prato de cima para usar

18

Page 111: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Pilha• Remove primeiro objetos inseridos há menos tempo• LIFO (last-infirst-out): último a entrar é primeiro a sair

É como uma pilha de pratos:

• Empilha os pratos limpos sobre os que já estão na pilha• Desempilha o prato de cima para usar

18

Page 112: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Pilha• Remove primeiro objetos inseridos há menos tempo• LIFO (last-infirst-out): último a entrar é primeiro a sair

É como uma pilha de pratos:• Empilha os pratos limpos sobre os que já estão na pilha

• Desempilha o prato de cima para usar

18

Page 113: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Pilha• Remove primeiro objetos inseridos há menos tempo• LIFO (last-infirst-out): último a entrar é primeiro a sair

É como uma pilha de pratos:• Empilha os pratos limpos sobre os que já estão na pilha• Desempilha o prato de cima para usar

18

Page 114: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

19

Page 115: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha

• Desempilha (pop): remove do topo da pilha

19

Page 116: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

19

Page 117: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

Exemplo:

19

Page 118: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

Exemplo: Empilha(A)

19

Page 119: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

Exemplo: Empilha(A)

A

19

Page 120: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

Exemplo: Empilha(B)

A

19

Page 121: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

Exemplo: Empilha(B)

A

B

19

Page 122: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

Exemplo: Desempilha()

A

B

19

Page 123: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

Exemplo: Desempilha()

A

19

Page 124: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

Exemplo: Empilha(C)

A

19

Page 125: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

Exemplo: Empilha(C)

A

C

19

Page 126: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

Exemplo: Empilha(D)

A

C

19

Page 127: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

Exemplo: Empilha(D)

A

C

D

19

Page 128: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

Exemplo: Desempilha()

A

C

D

19

Page 129: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

Exemplo: Desempilha()

A

C

19

Page 130: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

Exemplo: Desempilha()

A

C

19

Page 131: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

PilhaOperações:

• Empilha (push): adiciona no topo da pilha• Desempilha (pop): remove do topo da pilha

Exemplo: Desempilha()

A

19

Page 132: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Pilha: implementação com vetor

A B C D

topoDefinição:1 typedef struct {2 int *v;3 int topo;4 } Pilha;

Inserção:1 void empilhar(Pilha *p, int i) {2 p->v[p->topo] = i;3 (p->topo)++;4 }

Remoção:1 int desempilhar(Pilha *p) {2 (p->topo)--;3 return p->v[p->topo];4 }

20

Page 133: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Pilha: implementação com vetor

A B C D

topoDefinição:1 typedef struct {2 int *v;3 int topo;4 } Pilha;

vetor para armazenar os dados

Inserção:1 void empilhar(Pilha *p, int i) {2 p->v[p->topo] = i;3 (p->topo)++;4 }

Remoção:1 int desempilhar(Pilha *p) {2 (p->topo)--;3 return p->v[p->topo];4 }

20

Page 134: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Pilha: implementação com vetor

A B C D

topoDefinição:1 typedef struct {2 int *v;3 int topo;4 } Pilha;

fim da pilha (posição da próxima inserção)

Inserção:1 void empilhar(Pilha *p, int i) {2 p->v[p->topo] = i;3 (p->topo)++;4 }

Remoção:1 int desempilhar(Pilha *p) {2 (p->topo)--;3 return p->v[p->topo];4 }

20

Page 135: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Pilha: implementação com vetor

A B C D

topoDefinição:1 typedef struct {2 int *v;3 int topo;4 } Pilha;

Inserção:1 void empilhar(Pilha *p, int i) {2 p->v[p->topo] = i;3 (p->topo)++;4 }

Remoção:1 int desempilhar(Pilha *p) {2 (p->topo)--;3 return p->v[p->topo];4 }

20

Page 136: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Pilha: implementação com vetor

A B C D

topoDefinição:1 typedef struct {2 int *v;3 int topo;4 } Pilha;

Inserção:1 void empilhar(Pilha *p, int i) {2 p->v[p->topo] = i;3 (p->topo)++;4 }

Remoção:1 int desempilhar(Pilha *p) {2 (p->topo)--;3 return p->v[p->topo];4 }

20

Page 137: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Pilha: implementação com lista ligadaApós empilhar A, B e C:

pC B A

Inserção:1 void empilhar(No **pilha, int x) {2 No *novo = malloc(sizeof(No));3 novo->dado = x;4 novo->prox = pilha;5 *pilha = novo;6 }

Remoção:1 int desempilhar(No **pilha) {2 int x = pilha->dado;3 No *topo = *pilha;4 *pilha = topo->prox;5 free(topo);6 return x;7 }

21

Page 138: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Pilha: implementação com lista ligadaApós empilhar A, B e C:

pC B A

Inserção:1 void empilhar(No **pilha, int x) {2 No *novo = malloc(sizeof(No));3 novo->dado = x;4 novo->prox = pilha;5 *pilha = novo;6 }

Remoção:1 int desempilhar(No **pilha) {2 int x = pilha->dado;3 No *topo = *pilha;4 *pilha = topo->prox;5 free(topo);6 return x;7 }

21

Page 139: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Pilha: implementação com lista ligadaApós empilhar A, B e C:

pC B A

Inserção:1 void empilhar(No **pilha, int x) {2 No *novo = malloc(sizeof(No));3 novo->dado = x;4 novo->prox = pilha;5 *pilha = novo;6 }

Remoção:1 int desempilhar(No **pilha) {2 int x = pilha->dado;3 No *topo = *pilha;4 *pilha = topo->prox;5 free(topo);6 return x;7 }

21

Page 140: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Pilha: implementação com lista ligadaApós empilhar A, B e C:

pC B A

Inserção:1 void empilhar(No **pilha, int x) {2 No *novo = malloc(sizeof(No));3 novo->dado = x;4 novo->prox = pilha;5 *pilha = novo;6 }

Remoção:1 int desempilhar(No **pilha) {2 int x = pilha->dado;3 No *topo = *pilha;4 *pilha = topo->prox;5 free(topo);6 return x;7 }

21

Page 141: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Exemplos de aplicações

Algumas aplicações de pilhas:

• Balanceamento de parênteses

– expressões matemáticas, linguagens de programação,HTML...

• Cálculo e conversão de notações

– pré-fixa, pós-fixa, infixa (com parênteses)

• Percurso de estruturas de dados complexas (grafos etc.)• Recursão

Veremos algumas dessas aplicações na próxima unidade

22

Page 142: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Exemplos de aplicações

Algumas aplicações de pilhas:• Balanceamento de parênteses

– expressões matemáticas, linguagens de programação,HTML...

• Cálculo e conversão de notações

– pré-fixa, pós-fixa, infixa (com parênteses)

• Percurso de estruturas de dados complexas (grafos etc.)• Recursão

Veremos algumas dessas aplicações na próxima unidade

22

Page 143: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Exemplos de aplicações

Algumas aplicações de pilhas:• Balanceamento de parênteses

– expressões matemáticas, linguagens de programação,HTML...

• Cálculo e conversão de notações

– pré-fixa, pós-fixa, infixa (com parênteses)

• Percurso de estruturas de dados complexas (grafos etc.)• Recursão

Veremos algumas dessas aplicações na próxima unidade

22

Page 144: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Exemplos de aplicações

Algumas aplicações de pilhas:• Balanceamento de parênteses

– expressões matemáticas, linguagens de programação,HTML...

• Cálculo e conversão de notações

– pré-fixa, pós-fixa, infixa (com parênteses)

• Percurso de estruturas de dados complexas (grafos etc.)• Recursão

Veremos algumas dessas aplicações na próxima unidade

22

Page 145: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Exemplos de aplicações

Algumas aplicações de pilhas:• Balanceamento de parênteses

– expressões matemáticas, linguagens de programação,HTML...

• Cálculo e conversão de notações– pré-fixa, pós-fixa, infixa (com parênteses)

• Percurso de estruturas de dados complexas (grafos etc.)• Recursão

Veremos algumas dessas aplicações na próxima unidade

22

Page 146: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Exemplos de aplicações

Algumas aplicações de pilhas:• Balanceamento de parênteses

– expressões matemáticas, linguagens de programação,HTML...

• Cálculo e conversão de notações– pré-fixa, pós-fixa, infixa (com parênteses)

• Percurso de estruturas de dados complexas (grafos etc.)

• Recursão

Veremos algumas dessas aplicações na próxima unidade

22

Page 147: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Exemplos de aplicações

Algumas aplicações de pilhas:• Balanceamento de parênteses

– expressões matemáticas, linguagens de programação,HTML...

• Cálculo e conversão de notações– pré-fixa, pós-fixa, infixa (com parênteses)

• Percurso de estruturas de dados complexas (grafos etc.)• Recursão

Veremos algumas dessas aplicações na próxima unidade

22

Page 148: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Exemplos de aplicações

Algumas aplicações de pilhas:• Balanceamento de parênteses

– expressões matemáticas, linguagens de programação,HTML...

• Cálculo e conversão de notações– pré-fixa, pós-fixa, infixa (com parênteses)

• Percurso de estruturas de dados complexas (grafos etc.)• Recursão

Veremos algumas dessas aplicações na próxima unidade

22

Page 149: MC-202 — Unidade 7 Filas e Pilhas - ic.unicamp.brrafael/cursos/1s2017/mc202/slides/... · MC-202 — Unidade 7 Filas e Pilhas Rafael C. S. Schouery rafael@ic.unicamp.br Universidade

Exercícios

1. Complete as implementações (com vetor e lista ligada) depilhas e filas com as operações auxiliares: inicializar,eh_vazia, eh_cheia (para vetor).

2. Um deque (double-endedqueue) é um conjunto dinâmicocom operações: insere_inicio, insere_fim,remove_inicio, remove_fim. Implemente um dequeutilizando listas ligadas.

23