duda en pila con lenguaje c

Iniciado por king1517, 29 Junio 2011, 15:55 PM

0 Miembros y 1 Visitante están viendo este tema.

king1517

 Ante todo buenos dias y un cordial saludo este es mi problema el programa no me quiere correr ,quisiera saber cuales son mis errores:

ya que soy un poco nuevo en esto



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

typedef int tipo;


typedef struct Pila

{
    int aux;   
    int dato;
    struct Pila *Sig;

   
}PILAD;



// Funciones R-W



void InsertaPila(PILAD **, tipo);
tipo eliminar(PILAD **);
tipo Tope(PILAD *);
void BorraPila(PILAD **);
void ImprimirPila(PILAD *);


//Funciones.cpp
//Código:

//#include "Directiva.h"

void InsertaPila(PILAD **top ,tipo Elem)

{
    PILAD *Aux = (PILAD *)malloc(sizeof(PILAD));
    Aux->dato=Elem;
    Aux->Sig = *top;
    *top = Aux;

}





void mostrar(PILAD *p)

{
   PILAD *aux;
   aux = p;
   printf("\nElementos existentes en la Pila:\n");
   if(aux == NULL)
   {
      printf("\n No hay Datos en la Pila!...");
   }
   else
   {
      while(aux != NULL)
      {
         printf("--> %i\n",aux->dato);
         aux = aux->sig;
      }
   }

}


void tope(PILAD *p)

{
   PILAD *aux;
   aux = p;
   if (aux != NULL)
   {
      printf("\n\nEl Primer ELEMENTO de la Pila es: %i",aux->dato);
   }
}






tipo eliminar(PILAD **A)
{
    tipo cont;
    PILAD *auxiliar = (PILAD *)malloc(sizeof(PILAD));
    aux =*A;
   
    if(!aux)
    {
        cont = aux->dato;
        *A = (*A)->Sig;
        free(aux); 
        return  cont;     
    }
   
    else
    {
         printf("Pila vacia");
         exit(-1);
    }
}



void Borrar Pila(PILAD **A)

{
     tipo Elem;
     while (!A)

     {
         Elem = eliminar (A);
     }

}




void ImprimirPila(PILAD *A)
{
     PILAD *Aux=(PILAD *)malloc(sizeof(PILAD));
     int Elem;
     for(Aux=A;Aux->Sig!=NULL;Aux=Aux->Sig)
     {
         Elem = Aux->dato;
         printf(" %d \n",Elem);
     }
}





//#include "funciones.cpp"

int main ()
{
     char Opc1;
     int Opc2,aux;
     PILAD *A;
     
     do
     {
         system ("cls");
         printf ("\t\t Estructura Pila Dinamica\n\n\n");
         printf ("1.- Insertar elemento en pila ");
         printf ("\n2.- Quitar elemento de pila");
         printf ("\n3.- Ver el primer elemento y el numero de elemtos en la pila");
         printf ("\n4.- Vaciar la pila");
         printf ("\n5.- Ver elcontenido de la pila");
         printf ("\n6.- Salir de la aplicacion");
         printf ("\n\n\n  Inserta el numero de la funcion a realizar: ");
         scanf ("%d",&Opc2);
         
         switch(Opc2)

         {
             case 1:
                  system("cls");
                  printf ("\n\n Ingresa un numero para insertar en la pila: ");
                  scanf ("%d",&aux);
                  InsertaPila (&A, aux);
             break;
             
             case 2:
                  system("cls");
                  printf ("\n\n El ultimo elemento extraido de la pila es: %d",eliminar(&A));
                 
             break;
             
             case 3:
                  system("cls");
                  printf ("\n\n El primer elemento de la pila es: %d",Tope (A));
             break;
             
             case 4:
                  system("cls");
                  BorrarPila(&A);
                  printf ("\n\n La pila a sido eliminada exitosamente");
                 
             break;             
           
             case 5:
                  System ("cls");                 
                  ImprimirPila(A);
             break;

             case 6:                 
                  exit(-1);
             break;
             
             default:
                   system("cls");
                   printf ("La opcion no es valida");
             break;
         }
         


         
         printf ("\n\nDeseas seguir en esta aplicacion [S/N]: ");
         scanf ("%s",&Opc1);
     }


     while ( Opc1 == 'S'  ||  Opc1 == 's' );     
}

king1517

Cita de: king1517 en 29 Junio 2011, 15:55 PM
Ante todo buenos dias y un cordial saludo este es mi problema el programa no me quiere correr ,quisiera saber cuales son mis errores:

ya que soy un poco nuevo en esto



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

typedef int tipo;


typedef struct Pila

{
    int aux;   
    int dato;
    struct Pila *Sig;

   
}PILAD;



// Funciones R-W



void InsertaPila(PILAD **, tipo);
tipo eliminar(PILAD **);
tipo Tope(PILAD *);
void BorraPila(PILAD **);
void ImprimirPila(PILAD *);


//Funciones.cpp
//Código:

//#include "Directiva.h"

void InsertaPila(PILAD **top ,tipo Elem)

{
    PILAD *Aux = (PILAD *)malloc(sizeof(PILAD));
    Aux->dato=Elem;
    Aux->Sig = *top;
    *top = Aux;

}





void mostrar(PILAD *p)

{
   PILAD *aux;
   aux = p;
   printf("\nElementos existentes en la Pila:\n");
   if(aux == NULL)
   {
      printf("\n No hay Datos en la Pila!...");
   }
   else
   {
      while(aux != NULL)
      {
         printf("--> %i\n",aux->dato);
         aux = aux->sig;
      }
   }

}


void tope(PILAD *p)

{
   PILAD *aux;
   aux = p;
   if (aux != NULL)
   {
      printf("\n\nEl Primer ELEMENTO de la Pila es: %i",aux->dato);
   }
}






tipo eliminar(PILAD **A)
{
    tipo cont;
    PILAD *auxiliar = (PILAD *)malloc(sizeof(PILAD));
    aux =*A;
   
    if(!aux)
    {
        cont = aux->dato;
        *A = (*A)->Sig;
        free(aux); 
        return  cont;     
    }
   
    else
    {
         printf("Pila vacia");
         exit(-1);
    }
}



void Borrar Pila(PILAD **A)

{
     tipo Elem;
     while (!A)

     {
         Elem = eliminar (A);
     }

}




void ImprimirPila(PILAD *A)
{
     PILAD *Aux=(PILAD *)malloc(sizeof(PILAD));
     int Elem;
     for(Aux=A;Aux->Sig!=NULL;Aux=Aux->Sig)
     {
         Elem = Aux->dato;
         printf(" %d \n",Elem);
     }
}





//#include "funciones.cpp"

int main ()
{
     char Opc1;
     int Opc2,aux;
     PILAD *A;
     
     do
     {
         system ("cls");
         printf ("\t\t Estructura Pila Dinamica\n\n\n");
         printf ("1.- Insertar elemento en pila ");
         printf ("\n2.- Quitar elemento de pila");
         printf ("\n3.- Ver el primer elemento y el numero de elemtos en la pila");
         printf ("\n4.- Vaciar la pila");
         printf ("\n5.- Ver elcontenido de la pila");
         printf ("\n6.- Salir de la aplicacion");
         printf ("\n\n\n  Inserta el numero de la funcion a realizar: ");
         scanf ("%d",&Opc2);
         
         switch(Opc2)

         {
             case 1:
                  system("cls");
                  printf ("\n\n Ingresa un numero para insertar en la pila: ");
                  scanf ("%d",&aux);
                  InsertaPila (&A, aux);
             break;
             
             case 2:
                  system("cls");
                  printf ("\n\n El ultimo elemento extraido de la pila es: %d",eliminar(&A));
                 
             break;
             
             case 3:
                  system("cls");
                  printf ("\n\n El primer elemento de la pila es: %d",Tope (A));
             break;
             
             case 4:
                  system("cls");
                  BorrarPila(&A);
                  printf ("\n\n La pila a sido eliminada exitosamente");
                 
             break;             
           
             case 5:
                  System ("cls");                 
                  ImprimirPila(A);
             break;

             case 6:                 
                  exit(-1);
             break;
             
             default:
                   system("cls");
                   printf ("La opcion no es valida");
             break;
         }
         


         
         printf ("\n\nDeseas seguir en esta aplicacion [S/N]: ");
         scanf ("%s",&Opc1);
     }


     while ( Opc1 == 'S'  ||  Opc1 == 's' );     
}

leogtz

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

typedef int tipo;

typedef struct Pila
{
   int aux;
   int dato;
   struct Pila *Sig;
} PILAD;


void InsertaPila(PILAD **, tipo);
tipo eliminar(PILAD **);
int Tope(PILAD *);
void BorraPila(PILAD **);
void ImprimirPila(PILAD *);

void InsertaPila(PILAD **top ,tipo Elem)

{
   PILAD *Aux = (PILAD *)malloc(sizeof(PILAD));
   Aux->dato=Elem;
   Aux->Sig = *top;
   *top = Aux;

}

void mostrar(PILAD *p)
{
  PILAD *aux;
  aux = p;
  printf("\nElementos existentes en la Pila:\n");
  if(aux == NULL)
  {
     printf("\n No hay Datos en la Pila!...");
  }
  else
  {
     while(aux != NULL)
     {
        printf("--> %d\n", aux->dato);
        aux = aux->Sig;
     }
  }

}


void tope(PILAD *p)

{
  PILAD *aux;
  aux = p;
  if (aux != NULL)
  {
     printf("\n\nEl Primer ELEMENTO de la Pila es: %i",aux->dato);
  }
}






int eliminar(PILAD **A)
{
   tipo cont;
   PILAD *auxiliar = (PILAD *)malloc(sizeof(PILAD));
   PILAD *aux = *A;

   if(!aux)
   {
       cont = aux->dato;
       *A = (*A)->Sig;
       free(aux);
       return  cont;
   }

   else
   {
        printf("Pila vacia");
        exit(-1);
   }
}



void BorrarPila(PILAD **A)
{
    int Elem;
    while (!A)

    {
        Elem = eliminar (A);
    }

}

void ImprimirPila(PILAD *A)
{
    PILAD *Aux = A;

    int Elem;

//     for(Aux = A; Aux != NULL; Aux = Aux->Sig)
//     {
//         Elem = Aux->dato;
//         printf(" %d \n", Aux->dato);
//     }

       while(Aux != NULL)
       {
           printf(" %d ", Aux->dato);
           Aux = Aux->Sig;
       }
}





//#include "funciones.cpp"

int main ()
{
    char Opc1;
    int Opc2,aux;
    PILAD *A = NULL;

    do
    {
        system("cls");
        printf ("\t\t Estructura Pila Dinamica\n\n\n");
        printf ("1.- Insertar elemento en pila ");
        printf ("\n2.- Quitar elemento de pila");
        printf ("\n3.- Ver el primer elemento y el numero de elemtos en la pila");
        printf ("\n4.- Vaciar la pila");
        printf ("\n5.- Ver elcontenido de la pila");
        printf ("\n6.- Salir de la aplicacion");
        printf ("\n\n\n  Inserta el numero de la funcion a realizar: ");
        scanf ("%d",&Opc2);

        switch(Opc2)

        {
            case 1:
                 system("cls");
                 printf ("\n\n Ingresa un numero para insertar en la pila: ");
                 scanf ("%d",&aux);
                 InsertaPila (&A, aux);
            break;

            case 2:
                 system("cls");
                 printf ("\n\n El ultimo elemento extraido de la pila es: %d",eliminar(&A));

            break;

            case 3:
                 system("cls");
                 //printf ("\n\n El primer elemento de la pila es: %d",Tope (A));
            break;

            case 4:
                 system("cls");
                 BorrarPila(&A);
                 printf ("\n\n La pila a sido eliminada exitosamente");

            break;

            case 5:
                 system("cls");
                 ImprimirPila(A);
            break;

            case 6:
                 exit(-1);
            break;

            default:
                  system("cls");
                  printf ("La opcion no es valida");
            break;
        }

        printf ("\n\nDeseas seguir en esta aplicacion [S/N]: ");
        scanf ("%s",&Opc1);
    }


    while ( Opc1 == 'S'  ||  Opc1 == 's' );
}


Te dejo el programa compilando, tiene bastantes errores, trata de resolverlos sino nos dices para ayudarte.

Algo importante, cuando trabajas con listas enlazadas o pilas, como quieras decirle, cuando vas a empezar a agregar elementos es importante que la inicialices a NULL.

PILAD *A = NULL;

Consejo, usa nombres para las variables que te digan algo, A no es un buen identificador, no dice NADA.

Otra cosa, aunque des la opción de eliminar la pila, debes vaciar la memoria asignada, independientemente de que el usuario no quiera.

Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com