21
Estrutura de Dados Pilha by Aquiles Burlamaqui

Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Embed Size (px)

Citation preview

Page 1: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Estrutura de Dados

Pilha

by Aquiles Burlamaqui

Page 2: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Definição

Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de novos elementos. Mais especificamente, uma pilha (= stack) é uma estrutura sujeita à seguinte regra de operação: sempre que houver uma remoção, o elemento removido é o que está na estrutura há menos tempo.

Em outras palavras, o primeiro objeto a ser inserido na pilha é o último a ser removido. Essa política é conhecida pela sigla LIFO (= Last-In-First-Out).

Page 3: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Analise de Código

Execute os passos:1) Baixar os arquivos pilha.h, pilha.c e main.c

2) Gerar a biblioteca pilha.o

3) Compilar o main.c

4) Executar o main.c e ententer o seu funcionamento;

5) Entender o pilha.c (funções push e pop)

6) Desenhar uma memória e fazer um passo a passo da execução desse programa e as mudanças ocorridas na memória.

7) Construir uma função para retornar o tamanho da pilha.

8) Utilizar o comando free para liberar a memória durante o pop().

Page 4: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

pilha.h

Page 5: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

pilha.c

Page 6: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

main.c

Page 7: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Execução - main

pilha p1;

p1.tamanho = 0;

p1.topo = NULL;

push(10,&p1);

push(15,&p1);

push(20,&p1);

pop(&p1);

pop(&p1);

pop(&p1);

pop(&p1;

tamanho topo *

p1

??

Page 8: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Execução - main

pilha p1;

p1.tamanho = 0;

p1.topo = NULL;

push(10,&p1);

push(15,&p1);

push(20,&p1);

pop(&p1);

pop(&p1);

pop(&p1);

pop(&p1;

tamanho topo *

p1

0?

Page 9: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Execução - main

pilha p1;

p1.tamanho = 0;

p1.topo = NULL;

push(10,&p1);

push(15,&p1);

push(20,&p1);

pop(&p1);

pop(&p1);

pop(&p1);

pop(&p1;

tamanho topo *

p1

0

Page 10: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Execução - main

pilha p1;

p1.tamanho = 0;

p1.topo = NULL;

push(10,&p1);

push(15,&p1);

push(20,&p1);

pop(&p1);

pop(&p1);

pop(&p1);

pop(&p1;

tamanho topo *

p1

0

Page 11: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Execução - push(10,&p1);void push(int item, pilha *p) {

if(p->topo==NULL) {

p->tamanho = 1;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = NULL;

printf("Tava vazio, coloquei o primeiro: %i\n",item);

}else {

elemento * temp = p->topo;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = temp;

printf("Empilhei mais um...:%i\n",item);

}

}

tamanho topo *

p1

0

VERDADEIRO

Page 12: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Execução - push(10,&p1);void push(int item, pilha *p) {

if(p->topo==NULL) {

p->tamanho = 1;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = NULL;

printf("Tava vazio, coloquei o primeiro: %i\n",item);

}else {

elemento * temp = p->topo;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = temp;

printf("Empilhei mais um...:%i\n",item);

}

}

tamanho topo *

p1

1

Page 13: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Execução - push(10,&p1);void push(int item, pilha *p) {

if(p->topo==NULL) {

p->tamanho = 1;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = NULL;

printf("Tava vazio, coloquei o primeiro: %i\n",item);

}else {

elemento * temp = p->topo;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = temp;

printf("Empilhei mais um...:%i\n",item);

}

}

tamanho topo *

p1

1

?

valor proximo *

?

Page 14: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Execução - push(10,&p1);void push(int item, pilha *p) {

if(p->topo==NULL) {

p->tamanho = 1;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = NULL;

printf("Tava vazio, coloquei o primeiro: %i\n",item);

}else {

elemento * temp = p->topo;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = temp;

printf("Empilhei mais um...:%i\n",item);

}

}

tamanho topo *

p1

1

10

valor proximo *

?

Page 15: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Execução - push(10,&p1);void push(int item, pilha *p) {

if(p->topo==NULL) {

p->tamanho = 1;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = NULL;

printf("Tava vazio, coloquei o primeiro: %i\n",item);

}else {

elemento * temp = p->topo;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = temp;

printf("Empilhei mais um...:%i\n",item);

}

}

tamanho topo *

p1

1

10

valor proximo *

Page 16: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Execução - main

pilha p1;

p1.tamanho = 0;

p1.topo = NULL;

push(10,&p1);

push(15,&p1);

push(20,&p1);

pop(&p1);

pop(&p1);

pop(&p1);

pop(&p1;

tamanho topo *

p1

1

10

valor proximo *

Page 17: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Execução - main

tamanho topo *

p1

1

10

valor proximo *

void push(int item, pilha *p) {

if(p->topo==NULL) {

p->tamanho = 1;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = NULL;

printf("Tava vazio, coloquei o primeiro: %i\n",item);

}else {

elemento * temp = p->topo;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = temp;

printf("Empilhei mais um...:%i\n",item);

}

}

FALSO

Page 18: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Execução - main

tamanho topo *

p1

1

10

valor proximo *

void push(int item, pilha *p) {

if(p->topo==NULL) {

p->tamanho = 1;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = NULL;

printf("Tava vazio, coloquei o primeiro: %i\n",item);

}else {

elemento * temp = p->topo;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = temp;

printf("Empilhei mais um...:%i\n",item);

}

}

temp

Page 19: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Execução - maintamanho topo *

p1

1

10

valor proximo *

void push(int item, pilha *p) {

if(p->topo==NULL) {

p->tamanho = 1;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = NULL;

printf("Tava vazio, coloquei o primeiro: %i\n",item);

}else {

elemento * temp = p->topo;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = temp;

printf("Empilhei mais um...:%i\n",item);

}

}

temp

?

valor proximo *

?

Page 20: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Execução - maintamanho topo *

p1

1

10

valor proximo *

void push(int item, pilha *p) {

if(p->topo==NULL) {

p->tamanho = 1;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = NULL;

printf("Tava vazio, coloquei o primeiro: %i\n",item);

}else {

elemento * temp = p->topo;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = temp;

printf("Empilhei mais um...:%i\n",item);

}

}

temp

15

valor proximo *

?

Page 21: Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de

Execução - maintamanho topo *

p1

1

10

valor proximo *

void push(int item, pilha *p) {

if(p->topo==NULL) {

p->tamanho = 1;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = NULL;

printf("Tava vazio, coloquei o primeiro: %i\n",item);

}else {

elemento * temp = p->topo;

p->topo = malloc(sizeof(elemento));

p->topo->valor = item;

p->topo->proximo = temp;

printf("Empilhei mais um...:%i\n",item);

}

}

temp

15

valor proximo *