49
AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

AULA 08ESTRUTURA DE DADOS

Pilha - implementação estática

Norton T. Roman & Luciano A. Digiampietri

Page 2: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

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 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

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 4: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

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 5: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

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 6: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Pilha - implementação estática

Utilizaremos um arranjo de elementos de tamanhopredefinido;Controlaremos a posição do elemento que está notopo da pilha.

Page 7: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Ideia

Temos um arranjo de tamanho predefinido

Temos um campo para indicar a posição do elemento que estáno topo

Como inserimos o elemento 8?

Como excluímos um elemento?

Page 8: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Ideia

Temos um arranjo de tamanho predefinido

Temos um campo para indicar a posição do elemento que estáno topo

Como inserimos o elemento 8?

Como excluímos um elemento?

Page 9: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Ideia

Temos um arranjo de tamanho predefinido

Temos um campo para indicar a posição do elemento que estáno topo

Como inserimos o elemento 8?

Como excluímos um elemento?

Page 10: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Ideia

Temos um arranjo de tamanho predefinido

Temos um campo para indicar a posição do elemento que estáno topo

Como inserimos o elemento 8?

Como excluímos um elemento?

Page 11: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Ideia

Temos um arranjo de tamanho predefinido

Temos um campo para indicar a posição do elemento que estáno topo

Como inserimos o elemento 8?

Como excluímos um elemento?

Page 12: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Modelagem#include <stdio.h>

#define MAX 50

#define true 1

#define false 0

typedef int bool;

typedef int TIPOCHAVE;

typedef struct {

TIPOCHAVE chave;

} REGISTRO;

typedef struct {

REGISTRO A[MAX];

int topo;

} PILHA;

Page 13: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Modelagem#include <stdio.h>

#define MAX 50

#define true 1

#define false 0

typedef int bool;

typedef int TIPOCHAVE;

typedef struct {

TIPOCHAVE chave;

} REGISTRO;

typedef struct {

REGISTRO A[MAX];

int topo;

} PILHA;

Page 14: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Modelagem#include <stdio.h>

#define MAX 50

#define true 1

#define false 0

typedef int bool;

typedef int TIPOCHAVE;

typedef struct {

TIPOCHAVE chave;

} REGISTRO;

typedef struct {

REGISTRO A[MAX];

int topo;

} PILHA;

Page 15: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Funções de gerenciamento

Implementaremos funções para:Inicializar a estruturaRetornar a quantidade de elementos válidosExibir os elementos da estruturaInserir elementos na estrutura (push)Excluir elementos da estrutura (pop)Reinicializar a estrutura

Page 16: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Inicialização

Para inicializar uma pilha já criada pelo usuário,precisamos apenas acertar o valor do campo topo.

Já que o topo indicará a posição no arranjo doelemento que está no topo da pilha e a pilha estávazia, iniciaremos esse campo com valor -1.

Page 17: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Inicialização

Para inicializar uma pilha já criada pelo usuário,precisamos apenas acertar o valor do campo topo.

Já que o topo indicará a posição no arranjo doelemento que está no topo da pilha e a pilha estávazia, iniciaremos esse campo com valor -1.

Page 18: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Inicialização

void inicializarPilha(PILHA* p) {

p->topo = -1;

}

Page 19: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Inicialização

void inicializarPilha(PILHA* p) {

p->topo = -1;

}

Page 20: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Retornar número de elementos

Já que o campo topo contém a posição no arranjodo elemento no topo da pilha, o número deelementos é igual a: topo + 1Notem que para a pilha vazia isto também funciona.

Page 21: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Retornar número de elementos

Já que o campo topo contém a posição no arranjodo elemento no topo da pilha, o número deelementos é igual a: topo + 1

Notem que para a pilha vazia isto também funciona.

Page 22: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Retornar número de elementos

Já que o campo topo contém a posição no arranjodo elemento no topo da pilha, o número deelementos é igual a: topo + 1Notem que para a pilha vazia isto também funciona.

Page 23: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Retornar número de elementos

int tamanhoPilha(PILHA* p) {

return p->topo + 1;

}

Page 24: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Exibição/Impressão

Para exibir os elementos da estrutura precisaremositerar pelos elementos válidos e, por exemplo,imprimir suas chaves.

Page 25: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Exibição/Impressão

void exibirPilha(PILHA* p) {

printf("Pilha: \" ");

int i;

for (i=p->topo;i>=0;i--) {

printf("%i ", p->A[i].chave);

}

printf("\"\n");

}

Saída:

$ Pilha: " 7 2 5 "

Page 26: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Exibição/Impressão

void exibirPilha(PILHA* p) {

printf("Pilha: \" ");

int i;

for (i=p->topo;i>=0;i--) {

printf("%i ", p->A[i].chave);

}

printf("\"\n");

}

Saída:

$ Pilha: " 7 2 5 "

Page 27: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Exibição/Impressão

void exibirPilha(PILHA* p) {

printf("Pilha: \" ");

int i;

for (i=p->topo;i>=0;i--) {

printf("%i ", p->A[i].chave);

}

printf("\"\n");

}

Saída:

$ Pilha: " 7 2 5 "

Page 28: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Exibição/Impressão

void exibirPilha(PILHA* p) {

printf("Pilha: \" ");

int i;

for (i=p->topo;i>=0;i--) {

printf("%i ", p->A[i].chave);

}

printf("\"\n");

}

Saída:

$ Pilha: " 7 2 5 "

Page 29: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Inserção de um elemento (push)

O usuário passa como parâmetro um registro a serinserido na pilha

Se a pilha não estiver cheia, o elemento seráinserido no topo da pilha, ou melhor, “acima” doelemento que está no topo da pilha.

Page 30: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Inserção de um elemento (push)

O usuário passa como parâmetro um registro a serinserido na pilha

Se a pilha não estiver cheia, o elemento seráinserido no topo da pilha, ou melhor, “acima” doelemento que está no topo da pilha.

Page 31: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Inserção de um elemento (push)

bool inserirElementoPilha(PILHA* p, REGISTRO reg) {

if (p->topo >= MAX-1) return false;

p->topo = p->topo+1;

p->A[p->topo] = reg;

return true;

}

Page 32: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Inserção de um elemento (push)

bool inserirElementoPilha(PILHA* p, REGISTRO reg) {

if (p->topo >= MAX-1) return false;

p->topo = p->topo+1;

p->A[p->topo] = reg;

return true;

}

Page 33: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Inserção de um elemento (push)

bool inserirElementoPilha(PILHA* p, REGISTRO reg) {

if (p->topo >= MAX-1) return false;

p->topo = p->topo+1;

p->A[p->topo] = reg;

return true;

}

Page 34: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Inserção de um elemento (push)

bool inserirElementoPilha(PILHA* p, REGISTRO reg) {

if (p->topo >= MAX-1) return false;

p->topo = p->topo+1;

p->A[p->topo] = reg;

return true;

}

Page 35: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Inserção de um elemento (push)

bool inserirElementoPilha(PILHA* p, REGISTRO reg) {

if (p->topo >= MAX-1) return false;

p->topo = p->topo+1;

p->A[p->topo] = reg;

return true;

}

Page 36: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Inserção de um elemento (push)

bool inserirElementoPilha(PILHA* p, REGISTRO reg) {

if (p->topo >= MAX-1) return false;

p->topo = p->topo+1;

p->A[p->topo] = reg;

return true;

}

Page 37: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

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 38: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

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 39: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Exclusão de um elemento (pop)bool excluirElementoPilha(PILHA* p, REGISTRO* reg) {

if (p->topo == -1) return false;

*reg = p->A[p->topo];

p->topo = p->topo-1;

return true;

}

Page 40: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Exclusão de um elemento (pop)bool excluirElementoPilha(PILHA* p, REGISTRO* reg) {

if (p->topo == -1) return false;

*reg = p->A[p->topo];

p->topo = p->topo-1;

return true;

}

Page 41: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Exclusão de um elemento (pop)bool excluirElementoPilha(PILHA* p, REGISTRO* reg) {

if (p->topo == -1) return false;

*reg = p->A[p->topo];

p->topo = p->topo-1;

return true;

}

Page 42: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Exclusão de um elemento (pop)bool excluirElementoPilha(PILHA* p, REGISTRO* reg) {

if (p->topo == -1) return false;

*reg = p->A[p->topo];

p->topo = p->topo-1;

return true;

}

Page 43: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Exclusão de um elemento (pop)bool excluirElementoPilha(PILHA* p, REGISTRO* reg) {

if (p->topo == -1) return false;

*reg = p->A[p->topo];

p->topo = p->topo-1;

return true;

}

Page 44: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Exclusão de um elemento (pop)bool excluirElementoPilha(PILHA* p, REGISTRO* reg) {

if (p->topo == -1) return false;

*reg = p->A[p->topo];

p->topo = p->topo-1;

return true;

}

Page 45: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Exclusão de um elemento (pop)bool excluirElementoPilha(PILHA* p, REGISTRO* reg) {

if (p->topo == -1) return false;

*reg = p->A[p->topo];

p->topo = p->topo-1;

return true;

}

Page 46: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Reinicialização da pilha

Para esta estrutura, para reinicializar a pilha bastacolocar -1 no campo topo

Page 47: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Reinicialização da pilha

Para esta estrutura, para reinicializar a pilha bastacolocar -1 no campo topo

Page 48: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

Reinicialização da pilha

void reinicializarPilha(PILHA* p) {

p->topo = -1;

}

Page 49: AULA 08 ESTRUTURA DE DADOS · AULA 08 ESTRUTURA DE DADOS Pilha - implementação estática Norton T. Roman & Luciano A. Digiampietri

AULA 08ESTRUTURA DE DADOS

Pilha - implementação estática

Norton T. Roman & Luciano A. Digiampietri