Ir para conteúdo

POWERED BY:

Arquivado

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

Jonathan Pereira Lima

Pilhas C++

Recommended Posts

Eai galera, sou novo no fórum e gostaria de uma ajuda ai. Meio que urgente. haha. Tenho que fazer um codigo (to usando o dev) para retirar todos os números pares de uma determinada pilha, e colocar na pilha auxiliar. Porém depois de todo programa feito, construir a pilha 1, mostrar pilha 1, não consigo utilizar o procedimento PUSH, e a função POP que eu fiz, segue abaixo todo o código do programa e o erro que está dando na ultima função. O código funciona até essa função que retira os pares.

#include <stdio.h>
#include <conio.h>
#include <malloc.h>

struct pilha{
       int dados;
       struct pilha *proximo;
};

void push(struct pilha **topo,int valor, int *sinal);
void mostra_pilha(struct pilha **ppilha);
int pop(struct pilha **topo, int *sinal);


// PROGRAMA PRINCIPAL;
int main(){
    int num,ok;
    struct pilha *pilha1=NULL;
    struct pilha *pilhaaux=NULL;
    
    // Construindo PILHA 
    printf("\nPara encerrar digite 0");
    do{
         printf("\nInforme numeros para PILHA1: ");
         scanf("%d", &num);
         if(num != 0){
                push(&pilha1,num,&ok);
                if(ok==0){
                     printf("\nErro de alocacao! ");
                }
         }
    }while (num!=0);
    
    mostra_pilha(&pilha1);
    getch();
    
    pop(&pilha1,&ok);
    mostra_pilha(&pilha1);
    getch();
    
}
//Pilha ________________________________________________________________________

void push(struct pilha **topo,int valor, int *sinal){
     struct pilha *n;
     n = (struct pilha *) malloc (sizeof(struct pilha));
     if (n == NULL){
           *sinal=0;
     }else{
           n->dados=valor;
           n->proximo=*topo;
           *topo=n;
           *sinal=1;
     }
}

//Desempilha ___________________________________________________________________

int pop(struct pilha **topo, int *sinal){
    struct pilha *n,*aux;
    int valor;
    
    aux=*topo;
    if(aux == NULL){
            *sinal=0;
    }else{
            valor=aux->dados;
            n=aux;
            aux=n->proximo;
            free(n);
            *topo=aux;
            *sinal=1;
            return valor;
    }
} 

//Mostra Pilha _________________________________________________________________

void mostra_pilha(struct pilha **p1){
     struct pilha *aux;
     
     aux=*p1;
     while(aux != NULL){
               printf("\n\nValores Pilha - %i\n",aux->dados);
               aux=aux->proximo;
     }
}

//Retira Impares__ONDE ESTA ACONTECENDO O ERRO__________________________________________

void retira_impares(struct pilha *pilha1,struct pilha **pilhaaux){
     
     while(pilha1 != NULL){
                   if(pilha1->dados % 2 == 0){
                               push(*pilhaaux,pop(pilha1));
                   }else{
                              printf("\n IMPAR - %i",pilha1->dados);
                   }
     }while(pilhaaux != NULL){
                   push(pilha1,pop(*pilhaaux));
     }
}

 cannot convert `pilha*' to `pilha**' for argument `1' to `int pop(pilha**, int*)' 

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.