Ir ao conteúdo
  • Cadastre-se

Pilha funcionando, mas...


Ir à solução Resolvido por dontpanic,

Posts recomendados

Olá, eu fiz este programa de pilha que está funcionando e estaria perfeito se não fosse ao digitar pop com a lista vazia o programa parar de funcionar, segue abaixo o código:
 

#include<stdlib.h>
#include<stdlib.h>
#include<string.h>
 
typedef struct sNo
{
  int valor;
  struct sNo *Prox;
}NO;
 
void inic(NO **Pilha)
{
  *Pilha = NULL;
}
 
void push(NO ** Pilha,int Num)
{
  NO * Tmp;
  Tmp = (NO*)malloc(sizeof(NO));
  if(Tmp==NULL)return;
    Tmp->valor = Num;
    Tmp->Prox=*Pilha;
    *Pilha=Tmp;
}
 
int Empty(NO * Pilha)
{
  return(Pilha == NULL);
}
 
void pop(NO** Pilha)
{
  NO *Tmp =*Pilha;
  
  if(Empty(*Pilha))
    printf("VAZIA");
  *Pilha=(*Pilha)->Prox;
  printf("%i\n", Tmp->valor);
  free(Tmp);
}
 
int list(NO * Pilha)
{
  if(Empty(Pilha))
    return;
  printf("%d ", Pilha->valor);
  list(Pilha->Prox);
}
 
int peek(NO * Pilha)
{
  if(Empty(Pilha))
    return 0;
  printf("%d\n", Pilha->valor);
    return Pilha->valor;
}
 
int main()
{
  int num_comando;
  char string_digitada[50];
  char *comando;
  NO *Pilha=NULL;
  do
  {
    gets(string_digitada);
    comando=strtok(string_digitada," ");
    num_comando=atoi((char*)strtok(NULL, " "));
 
  if(strcmp(comando,"push")==0)
  {
    push(&Pilha,num_comando);
    continue;
  }
  else if(strcmp(comando,"list")==0)
  {
    list(Pilha);
    printf("\n");
   continue;
  }
  else if(strcmp(comando,"pop")==0)
  {
    pop(&Pilha);
   continue;
  }
  else if(strcmp(comando,"peek")==0)
  {
    peek(Pilha);
   continue;
  }
 }
  while(strcmp(comando,"end")!=0);
  system("pause");
  getch();
}
Link para o comentário
Compartilhar em outros sites

  • Solução

if(Empty(*Pilha))    printf("VAZIA");*Pilha=(*Pilha)->Prox; // Se a pilha estiver vazia, NULL = NULL->prox ?printf("%i\n", Tmp->valor);free(Tmp);
Se a pilha estiver vazia, os comandos depois do if vão dar erro.

Você precisa de um ELSE alí, ou de um return dentro do if.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!