• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

miudo23

pilhas dinamicas!!!

5 mensagens neste tópico

nao sei o k s passa c o seguinte codigo:

#include <stdio.h>
#include <stdlib.h>

typedef struct val{
        int conteudo;
        struct val *next;
}valor;

void push(int num, valor *pt, int a){
     
     if (a==0){
              valor *novo;
              novo=malloc(sizeof(valor));
              novo->conteudo=num;
              novo->next=pt->next;
              pt->next=novo;
     }
         
}

int pop(valor *pt){
    
    int x;
    valor *actual;
    actual=pt->next;
    x=actual->conteudo;
    pt->next=actual->next;
    free(actual);
    return x;
}
   
void input(valor *pt){
     
     int numero,a=0;
     
     printf("Insira os valores(0 para terminar) \n");
     do{
                    scanf("%d",&numero);
                    if(numero==0) a=1;
                    push(numero,pt,a);

     }while(numero!=0);
}

void output(valor *pt){
     
     printf("Os valores, pela ordem contraria, sao:\n");
     
     do{
                printf("%d\n",pop(pt));
     }while(pt->next!=NULL);

}
main(){
       
       valor *pt;
       pt=NULL;
       input(&pt);
       output(&pt);
       

system("PAUSE");
return 0;
}

se eu fizer input de 1,2,3 oprog devolve-m 3,2,1,2293696,649366928.

pk???? algm m sabe explicar??? e k ja tou a ficar piurso c isto  :rant_01:

--------

Esqueci-me de dizer k o objectivo do programa e escrever os valores inseridos por ordem inversa....como estamos a falar d pilhas....do topo ate ao fim...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E funcionar!

Eu por vezes gostava de saber que compilador é que alguns usam. Para deixar passar coisas deste tipo.

Então, input( ... ) recebe um ponteiro, e pt já é um ponteiro, porque &pt ?

Em relação ao erro é provavel que seja um next que não está NULL, já que não vejo no código uma unica inicialização de um Next a NULL.

Quando corrigires vai continuar a rebentar, mas logo se vê.

Iap, até funciona com as alterações que fiz.Aquela variavel "a" é que não devia de existir.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

uso o devc++.....ok vou tentar resolver cm dizes.....mas olha k fiz uma agenda em listas ligadas e nunca inicializei o next a NULL.....e nunca deu bug....

obrigado :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei como, deve ser um código especial.

#include <stdio.h>
#include <stdlib.h>

typedef struct val{
        int conteudo;
        struct val *next;
}valor;

void push(valor *pt,int num){
     valor *novo=(valor*)malloc(sizeof(valor));

     novo->conteudo=num;
     novo->next=pt->next;
     pt->next=novo;
         
}

int pop(valor *pt){
    int x;
    valor *actual;

    if(pt->next == NULL) return 0;

    actual=pt->next;
    x=actual->conteudo;
    pt->next=actual->next;
    free(actual);
    return x;
}
   
void input(valor *pt){
     int numero;
     
     printf("Insira os valores(0 para terminar) \n");
     scanf("%d",&numero);

     while(numero!=0){
         push(pt,numero);
 scanf("%d",&numero);
     }
}

void output(valor *pt){
     
     printf("Os valores, pela ordem contraria, sao:\n");
     
     while(pt->next!=NULL){
	printf("%d\n",pop(pt));
     }
}
int main(){
    valor *pt = (valor*)malloc(sizeof(valor));
    pt->next = NULL;

    input(pt);
    output(pt);

    free(pt);
    system("PAUSE");
    return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigado....eu sei k ainda tenho mts erros e k por por vezes tenho um codigo "sujo" ek n faz mt sentido....so programo em C ha 2 meses....uma vez mais obrigado :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora