![Page 1: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/1.jpg)
AULA 09ESTRUTURA DE DADOS
Pilha - implementação dinâmica
Norton T. Roman & Luciano A. Digiampietri
![Page 2: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/2.jpg)
Pilha
Pilha é uma estrutura linear na qual:- As inserções ocorrem no topo da pilha;- As exclusões ocorrem no topo da pilha.- Utiliza a mesma lógica de uma pilha de papéis.
![Page 3: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/3.jpg)
Pilha - implementação dinâmica
- Alocaremos e desalocaremos a memória para oselementos sob demanda;- Vantagem: não precisamos gastar memória quenão estamos usando;- Cada elemento indicará quem é seu sucessor(quem está “abaixo” dele na pilha);- Controlaremos o endereço do elemento que estáno topo da pilha.
![Page 4: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/4.jpg)
Pilha - implementação dinâmica- Alocaremos e desalocaremos a memória para oselementos sob demanda;
- Vantagem: não precisamos gastar memória quenão estamos usando;- Cada elemento indicará quem é seu sucessor(quem está “abaixo” dele na pilha);- Controlaremos o endereço do elemento que estáno topo da pilha.
![Page 5: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/5.jpg)
Pilha - implementação dinâmica- Alocaremos e desalocaremos a memória para oselementos sob demanda;- Vantagem: não precisamos gastar memória quenão estamos usando;
- Cada elemento indicará quem é seu sucessor(quem está “abaixo” dele na pilha);- Controlaremos o endereço do elemento que estáno topo da pilha.
![Page 6: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/6.jpg)
Pilha - implementação dinâmica- Alocaremos e desalocaremos a memória para oselementos sob demanda;- Vantagem: não precisamos gastar memória quenão estamos usando;- Cada elemento indicará quem é seu sucessor(quem está “abaixo” dele na pilha);- Controlaremos o endereço do elemento que estáno topo da pilha.
![Page 7: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/7.jpg)
Ideia
Temos um campo para indicar o endereço do elemento queestá no topo
Como inserimos o elemento 8?
Como excluímos um elemento?
![Page 8: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/8.jpg)
Ideia
Temos um campo para indicar o endereço do elemento queestá no topo
Como inserimos o elemento 8?
Como excluímos um elemento?
![Page 9: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/9.jpg)
Ideia
Temos um campo para indicar o endereço do elemento queestá no topo
Como inserimos o elemento 8?
Como excluímos um elemento?
![Page 10: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/10.jpg)
Ideia
Temos um campo para indicar o endereço do elemento queestá no topo
Como inserimos o elemento 8?
Como excluímos um elemento?
![Page 11: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/11.jpg)
Ideia
Temos um campo para indicar o endereço do elemento queestá no topo
Como inserimos o elemento 8?
Como excluímos um elemento?
![Page 12: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/12.jpg)
Modelagem
#include <stdio.h>
#include <malloc.h>
typedef int TIPOCHAVE;
typedef struct {
TIPOCHAVE chave;
// outros campos...
} REGISTRO;
typedef struct aux {
REGISTRO reg;
struct aux* prox;
} ELEMENTO;
typedef ELEMENTO* PONT;
typedef struct {
PONT topo;
} PILHA;
![Page 13: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/13.jpg)
Modelagem
#include <stdio.h>
#include <malloc.h>
typedef int TIPOCHAVE;
typedef struct {
TIPOCHAVE chave;
// outros campos...
} REGISTRO;
typedef struct aux {
REGISTRO reg;
struct aux* prox;
} ELEMENTO;
typedef ELEMENTO* PONT;
typedef struct {
PONT topo;
} PILHA;
![Page 14: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/14.jpg)
Modelagem
#include <stdio.h>
#include <malloc.h>
typedef int TIPOCHAVE;
typedef struct {
TIPOCHAVE chave;
// outros campos...
} REGISTRO;
typedef struct aux {
REGISTRO reg;
struct aux* prox;
} ELEMENTO;
typedef ELEMENTO* PONT;
typedef struct {
PONT topo;
} PILHA;
![Page 15: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/15.jpg)
Modelagem
#include <stdio.h>
#include <malloc.h>
typedef int TIPOCHAVE;
typedef struct {
TIPOCHAVE chave;
// outros campos...
} REGISTRO;
typedef struct aux {
REGISTRO reg;
struct aux* prox;
} ELEMENTO;
typedef ELEMENTO* PONT;
typedef struct {
PONT topo;
} PILHA;
![Page 16: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/16.jpg)
Modelagem
#include <stdio.h>
#include <malloc.h>
typedef int TIPOCHAVE;
typedef struct {
TIPOCHAVE chave;
// outros campos...
} REGISTRO;
typedef struct aux {
REGISTRO reg;
struct aux* prox;
} ELEMENTO;
typedef ELEMENTO* PONT;
typedef struct {
PONT topo;
} PILHA;
![Page 17: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/17.jpg)
Funções de gerenciamentoImplementaremos funções para:
Inicializar a estruturaRetornar a quantidade de elementos válidosExibir os elementos da estruturaVerificar se a pilha está vaziaInserir elementos na estrutura (push)Excluir elementos da estrutura (pop)Reinicializar a estrutura
![Page 18: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/18.jpg)
Inicialização
Para inicializar uma pilha já criada pelo usuário,precisamos apenas acertar o valor do campo topo.
Já que o topo conterá o endereço do elementoque está no topo da pilha e a pilha está vazia,iniciaremos esse campo com valor NULL.
![Page 19: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/19.jpg)
Inicialização
Para inicializar uma pilha já criada pelo usuário,precisamos apenas acertar o valor do campo topo.
Já que o topo conterá o endereço do elementoque está no topo da pilha e a pilha está vazia,iniciaremos esse campo com valor NULL.
![Page 20: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/20.jpg)
Inicialização
void inicializarPilha(PILHA* p) {
p->topo = NULL;
}
![Page 21: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/21.jpg)
Inicialização
void inicializarPilha(PILHA* p) {
p->topo = NULL;
}
![Page 22: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/22.jpg)
Retornar número de elementos
Já que não temos um campo com o número deelementos na pilha, precisaremos percorrer todosos elementos para contar quantos são.
![Page 23: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/23.jpg)
Retornar número de elementos
Já que não temos um campo com o número deelementos na pilha, precisaremos percorrer todosos elementos para contar quantos são.
![Page 24: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/24.jpg)
Retornar número de elementos
int tamanho(PILHA* p) {
PONT end = p->topo;
int tam = 0;
while (end != NULL) {
tam++;
end = end->prox;
}
return tam;
}
![Page 25: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/25.jpg)
Retornar número de elementos
int tamanho(PILHA* p) {
PONT end = p->topo;
int tam = 0;
while (end != NULL) {
tam++;
end = end->prox;
}
return tam;
}
![Page 26: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/26.jpg)
Retornar número de elementos
int tamanho(PILHA* p) {
PONT end = p->topo;
int tam = 0;
while (end != NULL) {
tam++;
end = end->prox;
}
return tam;
}
![Page 27: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/27.jpg)
Retornar número de elementos
int tamanho(PILHA* p) {
PONT end = p->topo;
int tam = 0;
while (end != NULL) {
tam++;
end = end->prox;
}
return tam;
}
![Page 28: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/28.jpg)
Retornar número de elementosint tamanho(PILHA* p) {
PONT end = p->topo;int tam = 0;while (end != NULL) {
tam++;end = end->prox;
}return tam;
}
int tamanho2(PILHA p) {PONT end = p.topo;int tam = 0;while (end != NULL) {
tam++;end = end->prox;
}return tam;
}
![Page 29: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/29.jpg)
Retornar número de elementosint tamanho(PILHA* p) {
PONT end = p->topo;int tam = 0;while (end != NULL) {
tam++;end = end->prox;
}return tam;
}
int tamanho2(PILHA p) {PONT end = p.topo;int tam = 0;while (end != NULL) {
tam++;end = end->prox;
}return tam;
}
![Page 30: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/30.jpg)
Retornar número de elementosint tamanho(PILHA* p) {
PONT end = p->topo;int tam = 0;while (end != NULL) {
tam++;end = end->prox;
}return tam;
}
int tamanho2(PILHA p) {PONT end = p.topo;int tam = 0;while (end != NULL) {
tam++;end = end->prox;
}return tam;
}
![Page 31: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/31.jpg)
Verificar se a pilha está vazia
Por que não usar a função tamanho para verificar sea pilha está vazia?É bem mais simples verificar se topo estáarmazenando o endereço NULL.
![Page 32: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/32.jpg)
Verificar se a pilha está vazia
Por que não usar a função tamanho para verificar sea pilha está vazia?
É bem mais simples verificar se topo estáarmazenando o endereço NULL.
![Page 33: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/33.jpg)
Verificar se a pilha está vazia
Por que não usar a função tamanho para verificar sea pilha está vazia?É bem mais simples verificar se topo estáarmazenando o endereço NULL.
![Page 34: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/34.jpg)
Verificar se a pilha está vazia
bool estaVazia(PILHA* p) {
if (p->topo == NULL) return true;
return false;
}
![Page 35: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/35.jpg)
Exibição/Impressão
Para exibir os elementos da estrutura precisaremospercorrer os elementos (iniciando pelo elemento dotopo da pilha) e, por exemplo, imprimir suas chaves.
![Page 36: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/36.jpg)
Exibição/Impressão
void exibirPilha(PILHA* p) {
PONT end = p->topo;
printf("Pilha: \" ");
while (end != NULL) {
printf("%i ", end->reg.chave);
end = end->prox;
}
printf("\"\n");
}
Saída:
$ Pilha: " 5 9 7 "
![Page 37: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/37.jpg)
Exibição/Impressão
void exibirPilha(PILHA* p) {
PONT end = p->topo;
printf("Pilha: \" ");
while (end != NULL) {
printf("%i ", end->reg.chave);
end = end->prox;
}
printf("\"\n");
}
Saída:
$ Pilha: " 5 9 7 "
![Page 38: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/38.jpg)
Exibição/Impressão
void exibirPilha(PILHA* p) {
PONT end = p->topo;
printf("Pilha: \" ");
while (end != NULL) {
printf("%i ", end->reg.chave);
end = end->prox;
}
printf("\"\n");
}
Saída:
$ Pilha: " 5 9 7 "
![Page 39: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/39.jpg)
Exibição/Impressão
void exibirPilha(PILHA* p) {
PONT end = p->topo;
printf("Pilha: \" ");
while (end != NULL) {
printf("%i ", end->reg.chave);
end = end->prox;
}
printf("\"\n");
}
Saída:
$ Pilha: " 5 9 7 "
![Page 40: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/40.jpg)
Inserção de um elemento (push)
O usuário passa como parâmetro um registro a serinserido na pilha
O elemento será inserido no topo da pilha, oumelhor, “acima” do elemento que está no topo dapilha.O novo elemento irá apontar para o elemento queestava no topo da pilha..
![Page 41: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/41.jpg)
Inserção de um elemento (push)
O usuário passa como parâmetro um registro a serinserido na pilha
O elemento será inserido no topo da pilha, oumelhor, “acima” do elemento que está no topo dapilha.O novo elemento irá apontar para o elemento queestava no topo da pilha..
![Page 42: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/42.jpg)
Inserção de um elemento (push)bool inserirElemPilha(PILHA* p, REGISTRO reg) {
PONT novo = (PONT) malloc(sizeof(ELEMENTO));
novo->reg = reg;
novo->prox = p->topo;
p->topo = novo;
return true;
}
![Page 43: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/43.jpg)
Inserção de um elemento (push)bool inserirElemPilha(PILHA* p, REGISTRO reg) {
PONT novo = (PONT) malloc(sizeof(ELEMENTO));
novo->reg = reg;
novo->prox = p->topo;
p->topo = novo;
return true;
}
![Page 44: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/44.jpg)
Inserção de um elemento (push)bool inserirElemPilha(PILHA* p, REGISTRO reg) {
PONT novo = (PONT) malloc(sizeof(ELEMENTO));
novo->reg = reg;
novo->prox = p->topo;
p->topo = novo;
return true;
}
![Page 45: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/45.jpg)
Inserção de um elemento (push)bool inserirElemPilha(PILHA* p, REGISTRO reg) {
PONT novo = (PONT) malloc(sizeof(ELEMENTO));
novo->reg = reg;
novo->prox = p->topo;
p->topo = novo;
return true;
}
![Page 46: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/46.jpg)
Inserção de um elemento (push)bool inserirElemPilha(PILHA* p, REGISTRO reg) {
PONT novo = (PONT) malloc(sizeof(ELEMENTO));
novo->reg = reg;
novo->prox = p->topo;
p->topo = novo;
return true;
}
![Page 47: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/47.jpg)
Exclusão de um elemento (pop)
O usuário solicita a exclusão do elemento do topoda pilha:
Se a pilha não estiver vazia, além de excluir esseelemento da pilha iremos copiá-lo para um localindicado pelo usuário.
![Page 48: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/48.jpg)
Exclusão de um elemento (pop)
O usuário solicita a exclusão do elemento do topoda pilha:
Se a pilha não estiver vazia, além de excluir esseelemento da pilha iremos copiá-lo para um localindicado pelo usuário.
![Page 49: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/49.jpg)
Exclusão de um elemento (pop)
bool excluirElemPilha(PILHA* p, REGISTRO* reg) {
if ( p->topo == NULL) return false;
*reg = p->topo->reg;
PONT apagar = p->topo;
p->topo = p->topo->prox;
free(apagar);
return true;
}
![Page 50: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/50.jpg)
Exclusão de um elemento (pop)
bool excluirElemPilha(PILHA* p, REGISTRO* reg) {
if ( p->topo == NULL) return false;
*reg = p->topo->reg;
PONT apagar = p->topo;
p->topo = p->topo->prox;
free(apagar);
return true;
}
![Page 51: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/51.jpg)
Exclusão de um elemento (pop)
bool excluirElemPilha(PILHA* p, REGISTRO* reg) {
if ( p->topo == NULL) return false;
*reg = p->topo->reg;
PONT apagar = p->topo;
p->topo = p->topo->prox;
free(apagar);
return true;
}
![Page 52: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/52.jpg)
Exclusão de um elemento (pop)
bool excluirElemPilha(PILHA* p, REGISTRO* reg) {
if ( p->topo == NULL) return false;
*reg = p->topo->reg;
PONT apagar = p->topo;
p->topo = p->topo->prox;
free(apagar);
return true;
}
![Page 53: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/53.jpg)
Exclusão de um elemento (pop)
bool excluirElemPilha(PILHA* p, REGISTRO* reg) {
if ( p->topo == NULL) return false;
*reg = p->topo->reg;
PONT apagar = p->topo;
p->topo = p->topo->prox;
free(apagar);
return true;
}
![Page 54: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/54.jpg)
Exclusão de um elemento (pop)
bool excluirElemPilha(PILHA* p, REGISTRO* reg) {
if ( p->topo == NULL) return false;
*reg = p->topo->reg;
PONT apagar = p->topo;
p->topo = p->topo->prox;
free(apagar);
return true;
}
![Page 55: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/55.jpg)
Exclusão de um elemento (pop)
bool excluirElemPilha(PILHA* p, REGISTRO* reg) {
if ( p->topo == NULL) return false;
*reg = p->topo->reg;
PONT apagar = p->topo;
p->topo = p->topo->prox;
free(apagar);
return true;
}
![Page 56: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/56.jpg)
Reinicialização da pilha
Para reinicializar a pilha, precisamos excluir todosos seus elementos e colocar NULL no campo topo
![Page 57: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/57.jpg)
Reinicialização da pilha
Para reinicializar a pilha, precisamos excluir todosos seus elementos e colocar NULL no campo topo
![Page 58: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/58.jpg)
Reinicialização da pilhavoid reinicializarPilha(PILHA* p) {
PONT apagar;
PONT posicao = p->topo;
while (posicao != NULL) {
apagar = posicao;
posicao = posicao->prox;
free(apagar);
}
p->topo = NULL;
}
![Page 59: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/59.jpg)
Reinicialização da pilhavoid reinicializarPilha(PILHA* p) {
PONT apagar;
PONT posicao = p->topo;
while (posicao != NULL) {
apagar = posicao;
posicao = posicao->prox;
free(apagar);
}
p->topo = NULL;
}
![Page 60: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/60.jpg)
Reinicialização da pilhavoid reinicializarPilha(PILHA* p) {
PONT apagar;
PONT posicao = p->topo;
while (posicao != NULL) {
apagar = posicao;
posicao = posicao->prox;
free(apagar);
}
p->topo = NULL;
}
![Page 61: AULA 09 ESTRUTURA DE DADOS · Pilha - implementação dinâmica - Alocaremos e desalocaremos a memória para os elementossob demanda; - Vantagem: não precisamosgastar memóriaque](https://reader036.vdocuments.com.br/reader036/viewer/2022070813/5f0cda1b7e708231d43772fe/html5/thumbnails/61.jpg)
AULA 09ESTRUTURA DE DADOS
Pilha - implementação dinâmica
Norton T. Roman & Luciano A. Digiampietri