aula_6_-_pilha(1)

7
  Pilha Algumas aplicações exigem um determinado critério quanto ao acesso aos elementos de suas estruturas . A pilha apresenta o critério LIFO (Last In First Out), isto é, dos elementos que compõem o conjunto de dados, o ultimo elemento inserido será o primeiro elemento a ser removido. As pilhas são estruturas essencialmente dinâmicas, isto é, aumentam e/ou diminuem de tamanho, de forma não previsível, durante a execução de um programa. Pilhas podem ser representadas de diversas maneiras, as duas mais usuais são por contiguidade e por encadeamento. Na representação por contiguidade, ocorre a exploração da sequencialidade da memória do computador. A estrutura em pilha tem os seguintes métodos ou funções:  push – coloca uma informação na pilha (empilha)  pop – retira uma informação da pilha (desempilha)  size – retorna o tamanho da pilha  stackpop – retorna o elemento superior da pilha sem removê-lo (equivalente às operações de pop e um push)  empty – verifica se a pilha está vazia O programa a seguir mostra o tratamento de uma pilha: #include <stdio.h> #include <stdlib.h> void push(int valor); int pop(void); int size(void); int stackpop(void); int pilha[20]; int pos = 0;

Transcript of aula_6_-_pilha(1)

Page 1: aula_6_-_pilha(1)

5/17/2018 aula_6_-_pilha(1) - slidepdf.com

http://slidepdf.com/reader/full/aula6-pilha1 1/7

 

Pilha

Algumas aplicações exigem um determinado critério quanto ao acesso aos

elementos de suas estruturas . A pilha apresenta o critério LIFO (Last In First Out), isto

é, dos elementos que compõem o conjunto de dados, o ultimo elemento inserido será o

primeiro elemento a ser removido.

As pilhas são estruturas essencialmente dinâmicas, isto é, aumentam e/ou

diminuem de tamanho, de forma não previsível, durante a execução de um programa.

Pilhas podem ser representadas de diversas maneiras, as duas mais usuais são

por contiguidade e por encadeamento. Na representação por contiguidade, ocorre a

exploração da sequencialidade da memória do computador.

A estrutura em pilha tem os seguintes métodos ou funções:

•  push – coloca uma informação na pilha (empilha)

•  pop – retira uma informação da pilha (desempilha)

•  size – retorna o tamanho da pilha

•  stackpop – retorna o elemento superior da pilha sem removê-lo

(equivalente às operações de pop e um push)

•  empty – verifica se a pilha está vazia

O programa a seguir mostra o tratamento de uma pilha:

#include <stdio.h>

#include <stdlib.h>

void push(int valor);

int pop(void);

int size(void);

int stackpop(void);

int pilha[20];

int pos = 0;

Page 2: aula_6_-_pilha(1)

5/17/2018 aula_6_-_pilha(1) - slidepdf.com

http://slidepdf.com/reader/full/aula6-pilha1 2/7

 

void push(int valor)

{

pilha[pos]= valor;

pos++;

return;

}

int pop()

{

return(pilha[--pos]);

}

int size()

{

return pos; //retorna o topo da pilha

}

int stackpop()

{

return pilha[pos];

}

int main()

{

printf("\n Colocados dados na pilha");

push(1);

push(2);

push(3);

printf("\n O tamanho da pilha eh: %d", size());

Page 3: aula_6_-_pilha(1)

5/17/2018 aula_6_-_pilha(1) - slidepdf.com

http://slidepdf.com/reader/full/aula6-pilha1 3/7

 

printf("\n Pegando dado da pilha: %d", pop());

printf("\n Pegando dado da pilha: %d", pop());

printf("\n Pegando dado da pilha: %d", pop());

printf("\n O tamanho da pilha eh: %d", size());

getch();

}

Outro exemplo:

#include <stdio.h>

#include <conio.h>

#define MAXELEM 3

typedef float TInfo;

typedef struct TPilha {

TInfo elem[MAXELEM];

int topo;

} TPilha;

void iniciaPilha(TPilha *p) {

(*p).topo = 0;

 //p->topo = 0;

}

int inserePilha(TPilha *p, TInfo valor) {

if (p->topo == MAXELEM) {

return 0;

Page 4: aula_6_-_pilha(1)

5/17/2018 aula_6_-_pilha(1) - slidepdf.com

http://slidepdf.com/reader/full/aula6-pilha1 4/7

 

} else {

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

p->elem[p->topo-1] = valor;

return 1;

}

}

int retiraPilha(TPilha *p, TInfo *valor) {

if (p->topo == 0) {

return 0;

} else {

*valor = p->elem[p->topo-1];

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

return 1;

}

}

int main() {

TPilha pilha;

TInfo v;

printf("\n");

iniciaPilha(&pilha);

if (retiraPilha(&pilha, &v)) {

printf("Valor retirado da pilha: %.2f.\n", v);

} else {

printf("Pilha vazia.\n");

}

if (inserePilha(&pilha, 1)) {

Page 5: aula_6_-_pilha(1)

5/17/2018 aula_6_-_pilha(1) - slidepdf.com

http://slidepdf.com/reader/full/aula6-pilha1 5/7

 

printf("Valor inserido.\n");

} else {

printf("Pilha cheia.\n");

}

if (inserePilha(&pilha, 2)) {

printf("Valor inserido.\n");

} else {

printf("Pilha cheia.\n");

}

if (inserePilha(&pilha, 3)) {

printf("Valor inserido.\n");

} else {

printf("Pilha cheia.\n");

}

if (inserePilha(&pilha, 4)) {

printf("Valor inserido.\n");

} else {

printf("Pilha cheia.\n");

}

if (retiraPilha(&pilha, &v)) {

printf("Valor retirado da pilha: %.2f.\n", v);

} else {

printf("Pilha vazia.\n");

}

if (retiraPilha(&pilha, &v)) {

Page 6: aula_6_-_pilha(1)

5/17/2018 aula_6_-_pilha(1) - slidepdf.com

http://slidepdf.com/reader/full/aula6-pilha1 6/7

 

printf("Valor retirado da pilha: %.2f.\n", v);

} else {

printf("Pilha vazia.\n");

}

if (inserePilha(&pilha, 4)) {

printf("Valor inserido.\n");

} else {

printf("Pilha cheia.\n");

}

if (retiraPilha(&pilha, &v)) {

printf("Valor retirado da pilha: %.2f.\n", v);

} else {

printf("Pilha vazia.\n");

}

if (retiraPilha(&pilha, &v)) {

printf("Valor retirado da pilha: %.2f.\n", v);

} else {

printf("Pilha vazia.\n");

}

getch();

return 0;

}

Page 7: aula_6_-_pilha(1)

5/17/2018 aula_6_-_pilha(1) - slidepdf.com

http://slidepdf.com/reader/full/aula6-pilha1 7/7

 

Exercícios para entregar:

1.  Construir uma função que troca de lugar o elemento que está no topo da pilha com que

está na base da pilha. Usar apenas uma pilha como auxiliar.

2.  Dada uma pilha contendo números inteiros quaisquer, construir uma função que coloca

os pares na base da pilha e os ímpares no topo da pilha. Usar duas pilhas como

auxiliares