sexta-feira, 26 de abril de 2013

Olá, Boa tarde

Vamos implementar uma pilha usando alocação estática de memória, ou seja, uma struct contendo um vetor que armazena os seus elementos e um apontador de topo que irá controlar a pilha.

Este apontador topo será utilizado para verificar situação de pilha vazia e cheia, assim como na inserção e remoção dos elementos.

Neste caso temos:


#include <stdio.h>
#include <conio.h>
#define MAX 6
// o tamanho máximo da pilha = 6

typedef struct{
        int info[MAX];
        int topo;
        } pilha;
// definição da struct pilha
        
void inicializa(pilha *p)
{
   p->topo = -1;
}

//*************************************

int vazia(pilha *p)
{
  return (p->topo ==-1);
}
//*************************************
int cheia (pilha *p)
{
 return (p->topo == MAX-1);

}
//*************************************

void push(pilha *p, int x)
{ if (cheia(p))
printf(" ERRO: PILHA CHEIA \n ");
else
{ p->topo++;
  p->info[p->topo]= x;
}
}

int pop(pilha *p)
{int aux;
  if (vazia(p))
      printf(" ERRO: PILHA VAZIA \n");
else
{aux = p->info[p->topo];
 p->topo--;
        }

 return aux;// return p->info[--p->topo];
}

Uma sugestão para o programa Main que pode testar a pilha:


int main()
{ int x,op;
  pilha p;
  inicializa(&p);
  do{
    printf("\n 1 - insercao ");
    printf("\n 2 - remoção ");
    printf("\n 4 - sair ");
    printf("\n Escolha uma opção ");
    scanf("%d",&op);
    switch (op)
{ case 1 : printf("\n Entre com um elemento ");
     scanf("%d",&x);
   push(&p,x);
   break;
  case 2: if (!vazia(&p))
    printf("\nElemento removido foi %d ",pop(&p));
        else 
        printf("Erro: Pilha Vazia");
break;
   }
  }while (op!=4);
  return 0;
}

Nenhum comentário:

Postar um comentário