estruturas lineares: filas e...
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/29.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/30.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/31.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/32.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/33.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/35.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/36.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/37.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/38.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/39.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/40.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/41.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/42.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/43.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/44.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/45.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/46.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/47.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/48.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/49.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/50.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/51.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/52.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/53.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/54.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/55.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/56.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/57.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/58.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/59.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/60.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/61.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/62.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/63.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/64.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/65.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/66.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/67.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/68.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/69.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/70.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/71.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/72.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/73.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/74.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/75.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/76.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/77.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/78.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/79.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/80.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/81.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/82.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/83.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/84.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/85.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/86.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/87.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/88.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/89.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/90.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/91.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/92.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/93.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/94.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/95.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060319/5f0cda1b7e708231d43772fc/html5/thumbnails/96.jpg)
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.