Duda con programa de Pilas

Iniciado por Emily, 31 Enero 2019, 06:10 AM

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

Emily

Tengo este avance de mi programa

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

typedef struct _Nodo{
        int dato;
        struct _Nodo *sig;
}Nodo;

Nodo *reservarmemoria(int dato){
     Nodo *espacio;
     espacio = (Nodo*) malloc(sizeof(Nodo));
     if(espacio != NULL){
                printf("Error");               
     }else{
           espacio -> dato = dato;
           espacio -> sig = NULL;
           return espacio;
     }
}
     
Nodo *alta(int dato, Nodo *cima){
     Nodo *box;
     box = reservarmemoria(dato);
     if (cima != NULL){
              box -> sig = cima;
     }
     return box;
}

Nodo *baja (Nodo *cima){
     Nodo *aux;
     if (cima != NULL){
              aux = cima;
              cima = aux -> sig;
              free(aux);
     }
     return cima;
}

void mostrar (Nodo *cima){
     if (cima == NULL){
              printf ("\n No hay nodos");             
     }else{
           while (cima != NULL){
                 printf ("Elemento %d\n", cima -> dato);
                 cima = cima -> sig;
           }
     }
}

void tamano (Nodo *cima){
     int i=0;
     if (cima == NULL){
              printf ("\n No hay nodos");             
     }else{
           while (cima != NULL){
                 cima = cima -> sig;
                 i++;
           }
           printf ("El tamaño es: %d\n", i);
     }
}

int main(){
    int op,dato;
    printf ("1.-Dar de alta un Nodo\n2.-Dar de baja un Nodo\n3.-Mostrar todos los Nodos\n4.-Mostrar el tamaño\n5.-Salir\n");
    scanf ("\n%d", &op);
    do{
          switch (op){
                 case 1:
                       printf ("Alta\nIntrodusca el numero a guardar en el nodo\n");
                       scanf ("%d\n", &dato);
                       alta(dato,);                                                                     
                 break;
                 case 2:
                      printf("Baja\n");
                      baja(cima);
                 break;
                 case 3:
                      mostrar(cima);
                 break;
                     
          }
         
    }while(op !=5);
    return 0;
}


Se que tengo que insertar una nueva estructura en el main que va a ser la que mande a cima pero no se de que manera hacerlo me preguntaba si alguien podría asesorarme

K-YreX

CitarSe que tengo que insertar una nueva estructura en el main que va a ser la que mande a cima
No sé a qué te refieres con esto. Si puedes explicarte un poco... :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Emily

Ya logre resolver mi duda con el programa
si a alguien le sirve el codigo, aqui lo dejo

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


    typedef struct Nodo
    {
        int Dato;
        struct Nodo *sig;
    }Nodo;


Nodo *Crear (int);
Nodo *Alta (int, Nodo *top);
Nodo *Baja (Nodo *top);
void Mostrar(Nodo *top);
void Contar (Nodo *top);

int main(){
    struct Nodo *Pila;
    Pila=NULL;
    int Op=1,dato,o,size;
    do {
    printf ("¿Que desea hacer?\n1:Añadir valor\n2:Mostrar valores\n3:Eliminar nodo\n4:Contar nodos\n5:Salir\n");
    scanf ("%d",&Op);
    switch (Op){
        case 1:
                printf ("\n\tIngrese el valor:");
                scanf ("%d",&dato);
                Pila=Alta(dato,Pila);
                system("cls");
                break;
        case 2:
                Mostrar(Pila);
                system("pause");
                system("cls");
               
                break;
        case 3:
                Pila=Baja(Pila);
                system("cls");
                break;
        case 4:
                Contar(Pila);
                system("pause");
                system("cls");
                break;
        case 5:
        break;
               
        default :
        printf( "\nOpcion incorrecta.\n" );
                }


        }while (Op!=5);
        }


Nodo *Crear (int dato){

            Nodo *espacio;
            espacio=(Nodo*)malloc(sizeof(Nodo));


                espacio->Dato=dato;

                espacio->sig=NULL;

                return espacio;

}


Nodo *Alta (int dato,Nodo *top)
{
    Nodo *box;
    box=Crear(dato);
        if (top==NULL){
            top=box;
        }
        else
        {
            box->sig=top;
            top=box;
        }
        return top;
}

Nodo *Baja (Nodo* top){
    Nodo *aux;
    if (top==NULL)
    {
        return 0;
    }
    else {

        aux=top;
        top=aux->sig;
        free (aux);
        return top;
    }
}

void Mostrar (Nodo *top){
    if(top==NULL)
    {
        printf ("\nNo hay ningun dato\n");
    }
    else {

        while (top!=NULL)
        {
            printf ("\n| %d |\n ___  ",top->Dato);
            top=top->sig;
        }
        printf("\n");
    }

}

void Contar (Nodo *top){
    int Cont=0;
    if(top==NULL)
    {
        printf ("No hay nada\n");
    }
    else {
        while (top!=NULL)
        {
            Cont=Cont+1;
            top=top->sig;
        }
        printf("El tamaño es: %d\n",Cont);
    }
}