estou tentando fazer um exercicio de pilha com estrutura de lista circular simplesmente encadeada, ele insere certinho, porém está dando problema na hora de retirar o último elemento da pilha
o borland acusa essa linha
numero = q->dado;
mas parece q ele nem entra nessa
if ((q->prox )== *pilha1)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct pilha
{
int dado;
struct pilha *prox;
};
typedef struct pilha *def_pilha;
def_pilha Pilha;
def_pilha cria_no (int numero)
{
def_pilha no = (def_pilha) malloc(sizeof(struct pilha));
no->dado = numero;
printf("\n\n cria no numero %d", no->dado);
no->prox = NULL;
return no;
}
void inicializa (def_pilha* pilha1)
{
*pilha1 = NULL;
}
int vazia(def_pilha pilha1)
{
return(pilha1 == NULL);
}
void push(int numero, def_pilha* pilha1)
{
def_pilha q = cria_no(numero);
if (vazia(*pilha1))
{
*pilha1 =q;
printf("inicializou");
}
else{
q->prox=(*pilha1)->prox;
(*pilha1)->prox=q;
printf("não inicializou");
}
}
int pop(def_pilha* pilha1)
{
def_pilha q;
int numero;
printf("\n entrou pop");
if (vazia(*pilha1))
{exit(1); printf("\n if vazia");}
q = (*pilha1)->prox;
numero = q->dado;
if ((q->prox )== *pilha1)
{printf("\n q = pilha");
*pilha1=NULL;
}
else{
(*pilha1) ->prox = q ->prox;
}
free(q);
printf("passou free");
return(numero);
}
int main (void)
{
int decimal,num=0;
inicializa(&Pilha);
printf(" insira numero \n");
scanf("%d",&decimal);
do{
push(decimal,&Pilha);
printf(" insira numero \n");
scanf("%d",&decimal);
}while(decimal!=0);
while (!vazia(Pilha)) {
num=pop(&Pilha);
printf(" \n numero: %d ",num);
}
getche();
}
Pergunta
tahinf
estou tentando fazer um exercicio de pilha com estrutura de lista circular simplesmente encadeada, ele insere certinho, porém está dando problema na hora de retirar o último elemento da pilha
o borland acusa essa linha
mas parece q ele nem entra nessa#include <stdio.h> #include <stdlib.h> #include <conio.h> struct pilha { int dado; struct pilha *prox; }; typedef struct pilha *def_pilha; def_pilha Pilha; def_pilha cria_no (int numero) { def_pilha no = (def_pilha) malloc(sizeof(struct pilha)); no->dado = numero; printf("\n\n cria no numero %d", no->dado); no->prox = NULL; return no; } void inicializa (def_pilha* pilha1) { *pilha1 = NULL; } int vazia(def_pilha pilha1) { return(pilha1 == NULL); } void push(int numero, def_pilha* pilha1) { def_pilha q = cria_no(numero); if (vazia(*pilha1)) { *pilha1 =q; printf("inicializou"); } else{ q->prox=(*pilha1)->prox; (*pilha1)->prox=q; printf("não inicializou"); } } int pop(def_pilha* pilha1) { def_pilha q; int numero; printf("\n entrou pop"); if (vazia(*pilha1)) {exit(1); printf("\n if vazia");} q = (*pilha1)->prox; numero = q->dado; if ((q->prox )== *pilha1) {printf("\n q = pilha"); *pilha1=NULL; } else{ (*pilha1) ->prox = q ->prox; } free(q); printf("passou free"); return(numero); } int main (void) { int decimal,num=0; inicializa(&Pilha); printf(" insira numero \n"); scanf("%d",&decimal); do{ push(decimal,&Pilha); printf(" insira numero \n"); scanf("%d",&decimal); }while(decimal!=0); while (!vazia(Pilha)) { num=pop(&Pilha); printf(" \n numero: %d ",num); } getche(); }Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.