aula 09 estrutura de dados · pilha - implementação dinâmica - alocaremos e desalocaremos a...

61
AULA 09 ESTRUTURA DE DADOS Pilha - implementação dinâmica Norton T. Roman & Luciano A. Digiampietri

Upload: others

Post on 25-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

AULA 09ESTRUTURA DE DADOS

Pilha - implementação dinâmica

Norton T. Roman & Luciano A. Digiampietri