Kimura 0 Denunciar post Postado Junho 6, 2009 Estou montando este programa em C para trabalhar com Stacks Mas não está funcionando corretamente. struct stack { int data; struct stack *next; } stack; void push(struct stack **top, int valor, int *status) { struct stack *cache; cache = (struct stack *) malloc(sizeof(struct stack)); if(cache == NULL) { *status = 0; } else { cache->data = valor; cahe->next = *top; *top = cache; *status = 1; } } int pop(struct stack **top, int *status) { int valor; struct stack *cache; if(*top == NULL) { *status = 0; } else { valor = (*top)->data; cache = *top; *top = (*top)->next; free(cache); *status = 1; } return valor; } Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Junho 6, 2009 O que você quer é trabalhar com uma lista ligada... mas inserir e retirar dados como se fosse uma stack, certo? é muito simples.... eu refiz o código: http://codepad.org/gBnVmKC1 da uma olhada, veja se entende La no fórum Artigos e Laboratório de Códigos fontes (C/C++) (subforum de C/C++) eu escrevi um tutorial bem simples para ponteiros... as vezes te ajuda em alguma coisa. Se você buscar por "lista encadeada" no fórum vai encontrar muita coisa interesante também. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Kimura 0 Denunciar post Postado Junho 6, 2009 Olá Victor, Te agradeço mesmo pela reformulação do código, mas tem um porém: Eu não posso reformular este código inteiro. Se puder me diga onde estou errando. Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Junho 7, 2009 Hmmm... entendi. Sinceramente, acho que complicaram a toa... mas... =P O compilador para, você leu o que ele diz a respeito?? Eu ainda posso até fazer um chute, ele vai te falar que está a passar um tipo de ponteiros diferente do esperado, e falta um argumento na função pop(); topo1 já um ponteiro para um ponteiro para tpilha... você está passando apenas a "tpilha" apontada pelo ponteiro apontado por topo1. (ficou meio confuso... hahahahhahha) Se eu entendi, você tem que unir as duas stacks em uma nova stack, chamada topo3? ------------------------------- EDIT: Dei uma modificada na função pra você, veja o que você acha: (obs.: não compilei ainda, assim que eu for pra casa compilo) void unePilhas(struct tpilha **topo1, struct tpilha **topo2, struct tpilha **topo3) { int *dummy = (int*)malloc(sizeof(int)); for (;;) { if ((*topo1) == NULL && (*topo2) == NULL) return; else if ((*topo1) == NULL && (*topo2) != NULL) Push(topo3, Pop(topo2, dummy), dummy); else if ((*topo2) == NULL && (*topo1) != NULL) Push(topo3, Pop(topo1, dummy), dummy); else if ((*topo1)->dados > (*topo2)->dados) Push(topo3, Pop(topo2, dummy), dummy); else if ((*topo1)->dados <= (*topo2)->dados) Push(topo3, Pop(topo1, dummy), dummy); } } Compartilhar este post Link para o post Compartilhar em outros sites
Kimura 0 Denunciar post Postado Junho 7, 2009 Olá Victor, Ontem à noite eu consegui eliminar os erros de compilação: Obs.: Vou anotar o seu modo, que parecer ser bem interessante também. Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Junho 7, 2009 Kimura, continua faltando argumentos para as funções pop() e push(). Para ordenar os valores da pilha3, você pode usar um método de ordeação, como bolha, por exemplo. Compartilhar este post Link para o post Compartilhar em outros sites
Kimura 0 Denunciar post Postado Junho 7, 2009 Esqueci de te falar, eu removi o status das funções pop e push. Por isso consegui organizar o código direitinho. Estou na main agora. Compartilhar este post Link para o post Compartilhar em outros sites