none
Problema com um código de estruturas de dados em C RRS feed

  • Pergunta

  • Quero saber qual o erro nesse código de uma atividade que foi-me proposta, acreditava eu que tava certo, revisei tudo e não consigo entender pq não compila.

    Se alguém puder analisar e encontrar aonde ta o problema no código agradeço! 

    Atividade). Crie uma função denominada de esvazie que receba uma pilha dinâmica como parâmetro e descarte todos os elementos. Ou seja, após a chamada da função esvazie se fizermos a chamada da função empty o resultado deverá ser true. A função esvazie não deverá permitir o vazamento de memória.<o:p></o:p>

    #include<stdlib.h>
    #include<stdio.h>
    #include <conio.h>    
    
        struct elem_pilha{
            char valor; 
            elem_pilha *anterior;
        };
        struct pilha{
            elem_pilha *topo;
        };
        void init(pilha *p){ p->topo = NULL; }
        int  empty(pilha *p){
            if(p->topo == NULL){ return 1;}
            else{ return 0; }}
            
        void push(pilha *p,char v){
          elem_pilha *novo = (elem_pilha*) malloc(sizeof(elem_pilha));
          novo->anterior = p->topo;
          p->topo = novo;
          novo->valor = v;
          printf("Empilhou o %c \n",v);
        }
        
        char pop(pilha *p){
            if(empty(p)){
                printf("Pilha vazia!!!");
                exit(1);
            }else{ 
                char valorRetorno;
                elem_pilha *aux = p->topo;
                p->topo = aux->anterior;
                valorRetorno = aux->valor;
                free(aux);
                return valorRetorno;
            }}
            
    int stacktop(pilha *p){
            if(empty(p)){printf("Pilha vazia");
                         exit(1);
            }else{return p->topo->valor;}
            }   
            
    int string_length(char str[]){
           int i;
               for(i=0; i<50; i++){
                 if(str[i]=='\0'){ return(i);}
           }}
    void esvazie(pilha *p){
            if(empty(p)){
                printf("Pilha vazia");
            }else{
            printf("\nEsvaziando...\n");
            while(p->topo != NULL){
            printf("\nRetirou o %c",pop(p)); 
            }}}
                 
    main(){
            pilha p1; 
            int cont , i; 
            char texto[40]; 
                                 
            init(&p1); 
            do{
                   printf("Digite o texto\n");
            gets(texto);
            printf("\n");
            cont = string_length(texto); 
            for(i=0;i<cont;i++){
                push(&p1,texto[i]);
            }
            if(cont == 0){
                    printf("digite algum texto na pilha\n");
                    }else{
            esvazie(&p1);
            if(empty(&p1)){ printf("\n\nPilha vazia\n");}
            }
            }while(cont == 0);
            system("PAUSE");
            return 0;
    }
    


    sábado, 7 de dezembro de 2013 15:15