Ir para conteúdo
Fórum Script Brasil
  • 0

Pilha dinâmica c


R!ck

Pergunta

Olá amigos. Estou tentando criar uma pilha dinâmica, mas, tudo parece estar certo só que não consigo mais identicar o que está dando errado. Se alguém puder dar uma ajuda.

O código...

/*1) Implementar as funções init, push, pop, stacktop e empty . 

2) Crie uma função (showStack) que exiba todos os elementos de uma pilha.

3) Crie um programa que receba via teclado um conjunto de dez números que serão
 colocados em uma pilha. Usando a função (showStack) exiba a pilha. Em seguida 
 desempilhe os números, informando cada número desempilhado. Usando a função 
 (showStack) exiba a pilha novamente. 
*/

#include<stdio.h>
#define tamanho_pilha 100

struct elemento_pilha
{
   int info;
   struct elemento_pilha *prox;
};

typedef struct
{
   struct elemento_pilha *top;
}pilha;

void init(pilha *p)
{
   p->top=NULL;
   printf("Pilha inicializada!");
   getch();
}

int empty(pilha *p)
{
   if(p->top==NULL)   
      return 1;   
   else   
      return 0;   
}

void push(pilha *p,int elemento)
{
   struct elemento_pilha *pl;
   pl=(struct elemento_pilha *) malloc (sizeof(struct elemento_pilha));   
   pl->info=elemento;
   pl->prox=p->top;
   p->top=pl;
}

int pop(pilha *p)
{
   int valortop;
   struct elemento_pilha *aux;
   
   if(empty(p)==1)
   {
      printf("\n stack underflow! \n");
      exit(1);
   }
   else
   {
      valortop=p->top->info;
      aux=p->top;
      p->top=p->top->prox;
      free(aux);
      return valortop;
   }   
}

int stacktop(pilha *p)
{
   if(empty(p))
   {
       printf("\n underflow! \n");
       exit(1);   
   }
   else
   {
      return p->top->info;
   }
}


void showstack (pilha *p)
{
     int i=0;
     pilha aux;
   
    if (empty(p)==1) 
       printf ("A Pilha esta vazia!");
    else 
    {       
       for (aux.top=p->top; empty(&aux)!= 1; aux.top=aux.top->prox)
       {
        i++;
        printf("\n\n %d Elemento da Pilha = %d",i,aux.top->info);      
       }
    }
}

int main()
{  
pilha pi;  
int i,num;


init(π);

for(i=0;i<1;i++)
{   
   for(i=0;i<10;i++)
   {
      printf("Informe um valor:");
      scanf("%d",&num);
      push(π,num);   
   }

   showstack(π);  

   for(i=0;i<10;i++)
   {
      top(π);
      printf("\n E Sera eliminado da pilha...");
      pop(π);   
   }
   printf("\n ");
   showstack(π);
}

system("pause");
}

Está dando o erro...

[Linker error]undefined reference to 'top'

id returned 1 exit status

Bem, espero ansioso por ajuda.

Até logo. = ]

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Rápido e mortal" Direto no alvo! rss

Para dizer a verdade tinha até definido só que com a denominação "stacktop".

Eu sou uma anta vesga mesmo hauauh.

Brigadão ae Jonathan Queiroz

Funcionando 100% agora... :D

/*1) Implementar as funções init, push, pop, stacktop e empty . 

2) Crie uma função (showStack) que exiba todos os elementos de uma pilha.

3) Crie um programa que receba via teclado um conjunto de dez números que serão
 colocados em uma pilha. Usando a função (showStack) exiba a pilha. Em seguida 
 desempilhe os números, informando cada número desempilhado. Usando a função 
 (showStack) exiba a pilha novamente. 
*/

#include<stdio.h>
#define tamanho_pilha 100

struct elemento_pilha
{
   int info;
   struct elemento_pilha *prox;
};

typedef struct
{
   struct elemento_pilha *top;
}pilha;

void init(pilha *p)
{
   p->top=NULL;
   printf("Pilha inicializada! \n\n");   
   getch();
}

int empty(pilha *p)
{
   if(p->top==NULL)   
      return 1;   
   else   
      return 0;   
}

void push(pilha *p,int elemento)
{
   struct elemento_pilha *pl;
   pl=(struct elemento_pilha *) malloc (sizeof(struct elemento_pilha));   
   pl->info=elemento;
   pl->prox=p->top;
   p->top=pl;
}

int pop(pilha *p)
{
   int valortop;
   struct elemento_pilha *aux;
   
   if(empty(p)==1)
   {
      printf("\n stack underflow! \n");
      exit(1);
   }
   else
   {
      valortop=p->top->info;
      aux=p->top;
      p->top=p->top->prox;
      free(aux);
      return valortop;
   }   
}

int top(pilha *p)
{
   if(empty(p))
   {
       printf("\n underflow! \n");
       exit(1);   
   }
   else
   {
      printf("\n O primeiro elemento da pilha e %d", p->top->info);
   }
}

void showstack (pilha *p)
{
     int i=0;
     pilha aux;
   
    if (empty(p)==1) 
       printf ("A Pilha esta vazia!\n");
    else 
    {       
       for (aux.top=p->top; empty(&aux)!= 1; aux.top=aux.top->prox)
       {
        i++;
        printf("\n\n %do Elemento da Pilha = %d \n",i,aux.top->info);      
       }
    }
}

int main()
{  
pilha pi;  
int i,num;


init(π);

for(i=0;i<1;i++)
{   
   for(i=0;i<10;i++)
   {
      printf("Informe um valor:\n");
      scanf("%d",&num);
      push(π,num);   
   }

   showstack(π);  

   for(i=0;i<10;i++)
   {
      top(π);
      printf("\n E Sera eliminado da pilha...");
      pop(π);   
   }
   printf("\n ");
   showstack(π);
}

system("pause");
}

Problema resolvido com louvor" Thanks!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...