Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

WellingtonR

Pilha Estatica

Recommended Posts

Bom , eu estou fazendo um exercicio de pilha estatica , porem o exercicio pede para poder imprimir a pilha usando a implementação classica . Como faço para poder imprimir os elementos ?

Segue abaixo o codigo ate aqui feito :

 

Qual o erro eu cometi na função exibir ???

 

 

#include<stdio.h>
#include<conio.h>
#define tam 10
 
typedef struct spilha 
{
    int itens [tam];
    int topo;
}pilha;
 
void init (pilha*s)
{
     s->topo=-1;
}
 
int vazia(pilha*s)
{
     if(s->topo==-1)
     {
         return 1;
     }
     return 0;
}
 
int cheia(pilha*s)
{
     if(s->topo==tam-1)
     {
         return 1;
     }
     return 0;
}
 
void empilhar (pilha*s,int x)
{
     if(cheia(s))
     {
         printf("\nERRO-Lista ja esta cheia\n");
         return ;
     }
     else
     {
         s->topo=s->topo+1;
         s->itens[s->topo]=x;
         printf("\nELEMENTO INSERIDO COM SUCESSO\n");
     }
}
 
int desempilhar(pilha*s)
{
    int aux;
    if(vazia(s))
    {
         printf("\nERRO-PILHA vazia\n");
         return -1;
    }
    else
    {
         aux=s->itens[s->topo];
         s->topo=s->topo-1;
         return aux;
    }
}
int stacktop(pilha*s)
{
    if(vazia(s))
    {
         printf("\nERRO -PILHA VAZIA\n");
         return -1;
    }
    return s->itens[s->topo];
}
 
void exibir(pilha*s)
{
     int i,aux;
     if(vazia(s))
     {
          printf("\nERRO-PILHA VAZIA\n");
     }
     else
     {
         for (i=0; i<=s->topo; i++)
         {
             aux=s->itens[s->topo];
             s->topo=s->topo-1;
             printf("%d \n" , s->itens[i]);
             
         }
     }
}
 
 
 
int main()
{
    pilha p;
    int aux, a,x;
    init(&p);
    do 
    {
         do
         {
              printf("######################################################\n");
              printf("#                   MENU DE OPCOES                                                     #\n");
              printf("#                                                                                                      #\n");
              printf("#            1_INSERIR ELEMENTO NA PILHA:                                     #\n");
              printf("#            2_REMOVER ELEMENTO DA PILHA:                                 #\n");
              printf("#         3_VER O ELEMENTO DO TOPO DA PILHA:                          #\n");
              printf("#     4_EXIBIR OS ELEMENTOS DA PILHA (CLASSICA):                 #\n");
              printf("#                       5_SAIR                                                                      #\n");
              printf("#                                                                                                       #\n"); 
              printf("######################################################\n");
              scanf("%d",&a);
              printf("\n\n");      
         }while(a<1||a>5);
         switch(a)
         {
              case 1: 
              {
                   printf("Qual o valor deseja inserir na PILHA ?\n");
                   scanf("%d",&x);
                   empilhar(&p,x);
                   break;
              }
              case 2:
              {
                   aux=desempilhar(&p);
                   if(aux!=-1)
                   {
                        printf("\nVoce acabou de remover o elemento %d da PILHA\n",aux);
                   }
                   break;
              }
              case 3:
              {
                   aux=stacktop(&p);
                   if(aux!=-1)
                   {
                        printf("O elemento que esta no topo da pilha e %d \n",aux);
                   }
                   break;
              }
              case 4:
              {
                   exibir(&p);
                   break;
              }
              case 5:
              {
                   printf("\nOBRIGADO POR USAR O PROGRAMA\n");
                   sleep(2000);
                   exit(1);
              }
         }
    }while(a!=5);
    getch();
    return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para exibir é necessário desempilhar a pilha?

 

Tente isso:

for (i=0; i<=s->topo; i++)
    printf("%d \n" , s->itens[i]);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim , esta exigindo que para exibir e necessario desempilhar !

 

Mas quando desempilha , o valor nao será apagado ou ele continuará contido na pilha ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ideia de desempilhar é retirar da pilha. A não ser que você armazene em uma pilha temporária e depois retorne para a pilha a principal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.