estruturas lineares: filas e...

96
Estruturas lineares: filas e pilhas Profa. Mirtha Lina Fernández Venero Prof. Paulo Henrique Pisani http://professor.ufabc.edu.br/~paulo.pisani/ março/2018

Upload: others

Post on 25-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Estruturas lineares: filas e pilhas

Profa. Mirtha Lina Fernández Venero

Prof. Paulo Henrique Pisani

http://professor.ufabc.edu.br/~paulo.pisani/

março/2018

Page 2: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Agenda

• Pilhas: • Pilha estática;

• Pilha dinâmica (com lista simplesmente ligada).

• Filas: • Fila estática;

• Fila estática circular;

• Fila dinâmica (com lista simplesmente ligada).

• Outros tipos: deque, pilhas múltiplas;

• Exercícios.

Page 3: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha

Page 4: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

• Pilha (stack): estrutura de dados que adota a estratégia LIFO (Last In First Out): último a entrar é o primeiro a sair;

• Operações básicas: • Empilhar/Push (inserção);

• Desempilhar/Pop (remoção).

Page 5: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

Page 6: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

• Pilha estática: implementa a estrutura de dados utilizando um arranjo;

• Portanto, os itens são armazenados em posições consecutivas na memória.

Page 7: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

• Estrutura básica: typedef struct Pilha Pilha;

struct Pilha {

int* itens;

int tamanho;

int topo;

};

Ponteiro para o

vetor alocado

Tamanho do

vetor alocado

Índices do elemento no

topo da pilha

Page 8: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

• Inicialização

itens=malloc(sizeof(int)*4)

tamanho=4

topo=-1

0 1 2 3

typedef struct Pilha Pilha;

struct Pilha {

int* itens;

int tamanho;

int topo;

};

(topo == -1) ==> Pilha vazia!

Page 9: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

• Como empilhar? • topo==tamanho-1 ?

• Sim: pilha cheia!

• Não: então podemos empilhar.

itens=malloc(sizeof(int)*4)

tamanho=4

topo=-1

0 1 2 3

typedef struct Pilha Pilha;

struct Pilha {

int* itens;

int tamanho;

int topo;

};

Page 10: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

• Empilhar 507: • Verificar se pilha

está cheia

• topo++

• itens[topo]=507

itens=malloc(sizeof(int)*4)

tamanho=4

topo=0

507

0 1 2 3

typedef struct Pilha Pilha;

struct Pilha {

int* itens;

int tamanho;

int topo;

};

Page 11: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

• Empilhar 222: • Verificar se pilha

está cheia

• topo++

• itens[topo]=222

itens=malloc(sizeof(int)*4)

tamanho=4

topo=1

507 222

0 1 2 3

typedef struct Pilha Pilha;

struct Pilha {

int* itens;

int tamanho;

int topo;

};

Page 12: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

• Empilhar 190: • Verificar se pilha

está cheia

• topo++

• itens[topo]=190

itens=malloc(sizeof(int)*4)

tamanho=4

topo=2

507 222 190

0 1 2 3

typedef struct Pilha Pilha;

struct Pilha {

int* itens;

int tamanho;

int topo;

};

Page 13: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

• Empilhar 350: • Verificar se pilha

está cheia

• topo++

• itens[topo]=350

itens=malloc(sizeof(int)*4)

tamanho=4

topo=3

507 222 190 350

0 1 2 3

typedef struct Pilha Pilha;

struct Pilha {

int* itens;

int tamanho;

int topo;

};

Page 14: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

• Empilhar 500: • Pilha está cheia!

• topo==tamanho-1

itens=malloc(sizeof(int)*4)

tamanho=4

topo=3

507 222 190 350

0 1 2 3

typedef struct Pilha Pilha;

struct Pilha {

int* itens;

int tamanho;

int topo;

};

Page 15: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

• Como desempilhar? • topo!=-1?

• Sim: podemos desempilhar

• Não: pilha vazia!

itens=malloc(sizeof(int)*4)

tamanho=4

topo=3

507 222 190 350

0 1 2 3

typedef struct Pilha Pilha;

struct Pilha {

int* itens;

int tamanho;

int topo;

};

Page 16: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

• Desempilhar • Verificar se pilha

está vazia

• Salvar itens[topo]

• Topo--

• Retonar item salvo

itens=malloc(sizeof(int)*4)

tamanho=4

topo=3

507 222 190 350

0 1 2 3

typedef struct Pilha Pilha;

struct Pilha {

int* itens;

int tamanho;

int topo;

};

Page 17: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

• Desempilhar • Verificar se pilha

está vazia

• Salvar itens[topo]

• Topo--

• Retonar item salvo

itens=malloc(sizeof(int)*4)

tamanho=4

topo=3

507 222 190 350

0 1 2 3

typedef struct Pilha Pilha;

struct Pilha {

int* itens;

int tamanho;

int topo;

};

Não

350

Page 18: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

• Desempilhar • Verificar se pilha

está vazia

• Salvar itens[topo]

• Topo--

• Retonar item salvo

itens=malloc(sizeof(int)*4)

tamanho=4

topo=2

507 222 190

0 1 2 3

typedef struct Pilha Pilha;

struct Pilha {

int* itens;

int tamanho;

int topo;

};

350

2

Page 19: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

• Desempilhar • Verificar se pilha

está vazia

• Salvar itens[topo]

• Topo--

• Retonar item salvo

itens=malloc(sizeof(int)*4)

tamanho=4

topo=2

507 222 190

0 1 2 3

typedef struct Pilha Pilha;

struct Pilha {

int* itens;

int tamanho;

int topo;

};

Não

190

Page 20: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha estática

• Desempilhar • Verificar se pilha

está vazia

• Salvar itens[topo]

• Topo--

• Retonar item salvo

itens=malloc(sizeof(int)*4)

tamanho=4

topo=1

507 222

0 1 2 3

typedef struct Pilha Pilha;

struct Pilha {

int* itens;

int tamanho;

int topo;

};

190

1

Page 21: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha dinâmica

Page 22: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha dinâmica

• Pilha dinâmica: implementa a estrutura de dados utilizando uma lista ligada;

• Portanto, os itens são alocados em memória de acordo com a necessidade.

Page 23: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha dinâmica

• Estrutura básica:

typedef struct Pilha Pilha;

struct Pilha {

LinkedNode* topo;

};

Ponteiro para o

primeiro item

da pilha

typedef struct LinkedNode LinkedNode;

struct LinkedNode {

int dados;

LinkedNode *next;

};

Page 24: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha dinâmica

• Inicialização

topo = NULL (topo == NULL) ==> Pilha vazia!

Page 25: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha dinâmica

• Como empilhar?

topo = NULL

1. Alocar novo LinkedNode

2. Adicioná-lo logo após o

item apontado por topo

3. Atualizar ponteiro topo

Page 26: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha dinâmica

• Como empilhar?

topo

1. Alocar novo LinkedNode

2. Adicioná-lo logo após o

item apontado por topo

3. Atualizar ponteiro topo

507 NULL

Page 27: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha dinâmica

• Como empilhar?

topo

1. Alocar novo LinkedNode

2. Adicioná-lo ANTES o

item apontado por topo

3. Atualizar ponteiro topo

507 NULL 120

Page 28: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha dinâmica

• Como empilhar?

topo

1. Alocar novo LinkedNode

2. Adicioná-lo ANTES o

item apontado por topo

3. Atualizar ponteiro topo

507 NULL 120 190

Page 29: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha dinâmica

• Como desempilhar?

topo

1. Verificar se pilha está

vazia

2. Salvar item apontador

por topo

3. topo = topo->next

4. Salvar valor do item

5. Liberar memória

ocupada pelo item

6. Retornar valor

507 NULL 120 190

Page 30: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha dinâmica

• Como desempilhar?

topo

1. Verificar se pilha está

vazia

2. Salvar item apontador

por topo

3. topo = topo->next

4. Salvar valor do item

5. Liberar memória

ocupada pelo item

6. Retornar valor

507 NULL 120

Page 31: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha dinâmica

• Como desempilhar?

topo

1. Verificar se pilha está

vazia

2. Salvar item apontador

por topo

3. topo = topo->next

4. Salvar valor do item

5. Liberar memória

ocupada pelo item

6. Retornar valor

507 NULL

Page 32: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Pilha dinâmica

• Como desempilhar?

topo=NULL

1. Verificar se pilha está

vazia

2. Salvar item apontador

por topo

3. topo = topo->next

4. Salvar valor do item

5. Liberar memória

ocupada pelo item

6. Retornar valor

Page 33: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila

Page 34: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila

• Fila (queue): estrutura de dados que adota a estratégia FIFO (First In First Out): primeiro a entrar é o primeiro a sair;

• Operações básicas: • Enfileirar (inserção);

• Desenfileirar (remoção).

Page 35: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

Page 36: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Fila estática: implementa a estrutura de dados utilizando um arranjo;

• Portanto, os itens são armazenados em posições consecutivas na memória.

Page 37: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Estrutura básica: typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

Ponteiro para o

vetor alocado

Tamanho do

vetor alocado

Índices dos elementos

de início e fim da fila

Page 38: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Inicialização

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=0

fim=0

0 1 2 3

Page 39: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Enfileirar o número 507

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

0 1 2 3

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=0

fim=0

Page 40: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Enfileirar o número 507

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

507

0 1 2 3

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=0

fim=1

Page 41: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Enfileirar o número 222

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

507

0 1 2 3

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=0

fim=1

Page 42: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Enfileirar o número 222

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

507 222

0 1 2 3

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=0

fim=2

Page 43: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Enfileirar o número 600

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

507 222 600

0 1 2 3

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=0

fim=3

Page 44: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Enfileirar o número 120

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

507 222 600

0 1 2 3

Erro! Fila está cheia!

fim == tamanho-1

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=0

fim=3

Page 45: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Como desenfileirar?

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

507 222 600

0 1 2 3

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=0

fim=3

Page 46: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Como desenfileirar?

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

507 222 600

0 1 2 3

1. Salva número indicado

por inicio (507);

2. inicio++

3. Retorna o número 507

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=0

fim=3

Page 47: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Como desenfileirar?

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

222 600

0 1 2 3

1. Salva número indicado

por inicio (507);

2. inicio++

3. Retorna o número 507

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=1

fim=3

Page 48: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Como desenfileirar?

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

222 600

0 1 2 3

1. Salva número indicado

por inicio (507);

2. inicio++

3. Retorna o número 507

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=1

fim=3

Outra estratégia seria mover todos

os itens para o início do arranjo

(assim como a lista estática faz)

Mas isso tornaria a operação O(n) !

Page 49: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Como desenfileirar?

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

600

0 1 2 3

1. Salva número indicado

por inicio (222);

2. inicio++

3. Retorna o número 222

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=2

fim=3

Page 50: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Como desenfileirar?

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

0 1 2 3

1. Salva número indicado

por inicio (600);

2. inicio++

3. Retorna o número 600

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=3

fim=3

Page 51: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Fila ficou vazia!

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

0 1 2 3

1. E se enfileirar novo item?

• Overflow (retorna fila

cheia)

• fim == tamanho-1

2. Como solucionar esse

problema?

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=3

fim=3

Page 52: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Fila ficou vazia!

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

0 1 2 3

1. E se enfileirar novo item?

• Overflow (retorna fila

cheia)

• fim == tamanho-1

2. Como solucionar esse

problema?

• Reiniciar índices inicio

e fim quando a fila

ficar vazia.

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=3

fim=3

Page 53: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Retomando a situação anterior…

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

600

0 1 2 3

1. Salva número indicado

por inicio (600);

2. inicio == fim-1

1. inicio=0

2. fim=0

3. Retorna o número 600

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=2

fim=3

Fila vai

ficar

vazia!

Page 54: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Retomando a situação anterior…

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

0 1 2 3

1. Salva número indicado

por inicio (600);

2. inicio == fim-1

1. inicio=0

2. fim=0

3. Retorna o número 600

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=0

fim=0

Fila vai

ficar

vazia!

Page 55: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Retomando a situação anterior…

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

0 1 2 3

1. Salva número indicado

por inicio (600);

2. inicio == fim-1

1. inicio=0

2. fim=0

3. Retorna o número 600

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=0

fim=0

Fila vai

ficar

vazia!

Podemos melhorar essa solução?

Page 56: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

• Retomando a situação anterior…

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

0 1 2 3

1. Salva número indicado

por inicio (600);

2. inicio == fim-1

1. inicio=0

2. fim=0

3. Retorna o número 600

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=0

fim=0

Fila vai

ficar

vazia!

Podemos melhorar essa solução?

Sim, com a fila estática circular!

Page 57: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

222 600

0 1 2 3

tamanho=4

itens=malloc(sizeof(int)*4)

inicio=1

fim=3

• Neste caso, a fila não ficará vazia após desenfileirar 222

• Mas ainda assim ocorrerá overflow se tentarmos enfileirar outro item!

Page 58: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Trata o vetor como se estivesse em um círculo:

0 1 2 3

0 3

2 1

Page 59: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Inicialização: • Estrutura igual à fila

estática não circular;

• O que muda é a forma de tratar os índices inicio e fim.

typedef struct Fila Fila;

struct Fila {

int* itens;

int tamanho;

int inicio, fim;

};

Page 60: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Inicialização:

0 3

2 1

(inicio == fim) ==> Fila vazia!

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=0

fim=0

Page 61: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Como enfileirar? • novo_fim=(fim+1) % tamanho

• novo_fim==inicio ? • Sim: fila cheia!

• Não: podemos enfileirar. 0 3

2 1

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=0

fim=0

Page 62: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Como enfileirar? • novo_fim=(fim+1) % tamanho

• novo_fim==inicio ? • Sim: fila cheia!

• Não: podemos enfileirar.

• Enfileirar 507: • Verifica se fila está cheia

• itens[fim] = 507

• fim = novo_fim

0 3

2 1

507

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=0

fim=1

Page 63: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Como enfileirar? • novo_fim=(fim+1) % tamanho

• novo_fim==inicio ? • Sim: fila cheia!

• Não: podemos enfileirar.

• Enfileirar 222: • Verifica se fila está cheia

• itens[fim] = 222

• fim = novo_fim

0 3

2 1

507

222

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=0

fim=2

Page 64: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Como enfileirar? • novo_fim=(fim+1) % tamanho

• novo_fim==inicio ? • Sim: fila cheia!

• Não: podemos enfileirar.

• Enfileirar 120: • Verifica se fila está cheia

• itens[fim] = 120

• fim = novo_fim

0 3

2 1

507

222 120

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=0

fim=3

Page 65: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Como enfileirar? • novo_fim=(fim+1) % tamanho

• novo_fim==inicio ? • Sim: fila cheia!

• Não: podemos enfileirar.

• Enfileirar 300: • Verifica se fila está cheia

• Fila está cheia! • (3+1)%4 == 0

0 3

2 1

507

222 120

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=0

fim=3

Page 66: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Como desenfileirar? • inicio==fim?

• Sim: fila vazia!

• Não: Podemos desenfileirar.

• Salva itens[inicio]

• novo_inicio=(inicio+1) % tamanho

• inicio = novo_inicio

• Retorna item salvo

0 3

2 1

507

222 120

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=0

fim=3

Page 67: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Como desenfileirar? • inicio==fim?

• Sim: fila vazia!

• Não: Podemos desenfileirar.

• Salva itens[inicio]

• novo_inicio=(inicio+1) % tamanho

• inicio = novo_inicio

• Retorna item salvo

0 3

2 1

507

222 120

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=0

fim=3

Page 68: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Como desenfileirar? • inicio==fim?

• Sim: fila vazia!

• Não: Podemos desenfileirar.

• Salva itens[inicio]

• novo_inicio=(inicio+1) % tamanho

• inicio = novo_inicio

• Retorna item salvo

0 3

2 1

507

222 120

Não

507

1

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=0

fim=3

Page 69: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Como desenfileirar? • inicio==fim?

• Sim: fila vazia!

• Não: Podemos desenfileirar.

• Salva itens[inicio]

• novo_inicio=(inicio+1) % tamanho

• inicio = novo_inicio

• Retorna item salvo

0 3

2 1

222 120 507

1

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=1

fim=3

Page 70: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Como desenfileirar? • inicio==fim?

• Sim: fila vazia!

• Não: Podemos desenfileirar.

• Salva itens[inicio]

• novo_inicio=(inicio+1) % tamanho

• inicio = novo_inicio

• Retorna item salvo

0 3

2 1

222 120

Não

222

2

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=1

fim=3

Page 71: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Como desenfileirar? • inicio==fim?

• Sim: fila vazia!

• Não: Podemos desenfileirar.

• Salva itens[inicio]

• novo_inicio=(inicio+1) % tamanho

• inicio = novo_inicio

• Retorna item salvo

0 3

2 1

120 222

2

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=2

fim=3

Page 72: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Como desenfileirar? • inicio==fim?

• Sim: fila vazia!

• Não: Podemos desenfileirar.

• Salva itens[inicio]

• novo_inicio=(inicio+1) % tamanho

• inicio = novo_inicio

• Retorna item salvo

0 3

2 1

222 120

Não

120

3

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=2

fim=3

Page 73: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Como desenfileirar? • inicio==fim?

• Sim: fila vazia!

• Não: Podemos desenfileirar.

• Salva itens[inicio]

• novo_inicio=(inicio+1) % tamanho

• inicio = novo_inicio

• Retorna item salvo

0 3

2 1 120

3

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=3

fim=3

Page 74: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Como desenfileirar? • inicio==fim?

• Sim: fila vazia!

• Não: Podemos desenfileirar. 0 3

2 1

(inicio == fim) ==> Fila vazia!

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=3

fim=3

Page 75: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Enfileirar 350: • novo_fim=(fim+1) % tamanho

• novo_fim=(3+1)%4=0

• novo_fim==inicio ? • Não: então podemos enfileirar!

0 3

2 1

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=3

fim=3

Page 76: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila estática circular

• Enfileirar 350: • novo_fim=(fim+1) % tamanho

• novo_fim=(3+1)%4=0

• novo_fim==inicio ? • Não: então podemos enfileirar!

• itens[fim]=350

• fim=novo_fim

0 3

2 1

350

itens=malloc(sizeof(int)*4)

tamanho=4

inicio=3

fim=0

Page 77: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila dinâmica

Page 78: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila dinâmica

• Fila dinâmica: implementa a estrutura de dados utilizando uma lista ligada;

• Portanto, os itens são alocados em memória de acordo com a necessidade.

Page 79: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila dinâmica

• Estrutura básica:

typedef struct Fila Fila;

struct Fila {

LinkedNode *inicio;

LinkedNode *fim;

};

Ponteiro para o

início da fila

Ponteiro para o

fim da fila

typedef struct LinkedNode LinkedNode;

struct LinkedNode {

int dados;

LinkedNode *next;

};

Page 80: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila dinâmica

• Inicialização

inicio=NULL

fim=NULL Inicio==NULL ==> Fila vazia!

Page 81: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila dinâmica

• Como enfileirar?

inicio=NULL

fim=NULL

1. Alocar novo LinkedNode

2. Adicioná-lo logo após o

item apontado por fim

3. Atualizar ponteiro fim

4. Quando a fila está vazia,

atualizar ponteiro inicio

também

Page 82: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila dinâmica

• Como enfileirar?

inicio

fim

1. Alocar novo LinkedNode

2. Adicioná-lo logo após o

item apontado por fim

3. Atualizar ponteiro fim

4. Quando a fila está vazia,

atualizar ponteiro inicio

também

507 NULL

Page 83: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila dinâmica

• Como enfileirar?

inicio

fim

1. Alocar novo LinkedNode

2. Adicioná-lo logo após o

item apontado por fim

3. Atualizar ponteiro fim

4. Quando a fila está vazia,

atualizar ponteiro inicio

também

507 222 NULL

Page 84: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila dinâmica

• Como enfileirar?

inicio

fim

1. Alocar novo LinkedNode

2. Adicioná-lo logo após o

item apontado por fim

3. Atualizar ponteiro fim

4. Quando a fila está vazia,

atualizar ponteiro inicio

também

507 222 190 NULL

Page 85: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila dinâmica

• Como desenfileirar?

inicio

fim

1. Verificar se fila está vazia

2. Salvar item apontado por

inicio

3. inicio = inicio->next

4. Salvar valor do item

5. Liberar memória ocupada

pelo item

6. Retornar valor

507 222 190 NULL

Page 86: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila dinâmica

• Como desenfileirar?

inicio

fim

1. Verificar se fila está vazia

2. Salvar item apontado por

inicio

3. inicio = inicio->next

4. Salvar valor do item

5. Liberar memória ocupada

pelo item

6. Retornar valor

222 190 NULL

Page 87: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila dinâmica

• Como desenfileirar?

inicio

fim

1. Verificar se fila está vazia

2. Salvar item apontado por

inicio

3. inicio = inicio->next

4. Salvar valor do item

5. Liberar memória ocupada

pelo item

6. Retornar valor

190 NULL

Page 88: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Fila dinâmica

• Como desenfileirar?

inicio=NULL

fim=NULL

1. Verificar se fila está vazia

2. Salvar item apontado por

inicio

3. inicio = inicio->next

4. Salvar valor do item

5. Liberar memória ocupada

pelo item

6. Retornar valor

Quando desenfilerar o último elemento, volte para

inicio=fim=NULL

Page 89: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Outros tipos

Page 90: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Outros tipos

• Deque: permite remover elementos do início ou do fim (combinação de fila e pilha);

• Pilha auto-ajustável: pilha estática que aloca/desaloca memória de acordo com a carga;

• Pilhas múltiplas: permite que mais de uma pilha compartilhe o mesmo arranjo.

Pilha 1 Área livre Pilha 2

Arranjo

Pilha 1 Área livre Pilha 2 Área livre Pilha 3

Arranjo

Page 91: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Resumo

Page 92: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Resumo

Filas Pilhas

Operações:

• Enfileirar

• Desenfileirar

Operações:

• Empilhar

• Desempilhar

FIFO LIFO

Page 93: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Resumo

Filas

Pilhas

Fila estática

Fila estática

circular

Fila dinâmica

Pilha estática

Pilha dinâmica

Page 94: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Resumo

Filas

Pilhas

Fila estática

Fila estática

circular

Fila dinâmica

Pilha estática

Pilha dinâmica

Todas as operações em filas e

pilhas apresentas aqui são O(1)

Page 95: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Exercícios

• Implemente as operações: • Pilha estáticas: Empilhar/Desempilhar

• Pilha dinâmica: Empilhar/Desempilhar

• Pilha auto-ajustável (material Profa. Mirtha): Empilhar/Desempilhar

• Fila estática circular: Enfileirar/Desenfileirar

• Fila dinâmica: Enfileirar/Desenfileirar

Page 96: Estruturas lineares: filas e pilhasprofessor.ufabc.edu.br/~mirtha.lina/UFABC/docAEDI/aedi0X_pratica_… · Pilha dinâmica •Como desempilhar? topo 1. Verificar se pilha está vazia

Referências

• Nivio Ziviani. Projeto de Algoritmos: com implementações em Pascal e C. Cengage Learning, 2015.

• Robert Sedgewick. Algorithms in C/C++/Java, Parts 1-4 (Fundamental Algorithms, Data Structures, Sorting, Searching). Addison-Wesley Professional.

• Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Algoritmos: Teoria e Prática. Elsevier, 2012.