Sie sind auf Seite 1von 7

Pilha

Algumas aplicaes exigem um determinado critrio quanto ao acesso aos elementos de suas estruturas . A pilha apresenta o critrio LIFO (Last In First Out), isto , dos elementos que compem o conjunto de dados, o ultimo elemento inserido ser o primeiro elemento a ser removido. As pilhas so estruturas essencialmente dinmicas, isto , aumentam e/ou diminuem de tamanho, de forma no previsvel, durante a execuo de um programa. Pilhas podem ser representadas de diversas maneiras, as duas mais usuais so por contiguidade e por encadeamento. Na representao por contiguidade, ocorre a explorao da sequencialidade da memria do computador. A estrutura em pilha tem os seguintes mtodos ou funes: push coloca uma informao na pilha (empilha) pop retira uma informao da pilha (desempilha) size retorna o tamanho da pilha stackpop retorna o elemento superior da pilha sem remov-lo (equivalente s operaes 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;

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());

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;

} 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)) {

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)) {

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; }

Exerccios para entregar:

1. Construir uma funo 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 nmeros inteiros quaisquer, construir uma funo que coloca os pares na base da pilha e os mpares no topo da pilha. Usar duas pilhas como auxiliares

Das könnte Ihnen auch gefallen