Pilas C++ usando Estructuras (STRUCT)

Iniciado por charmedever, 19 Octubre 2011, 00:52 AM

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

Ferno

Por supuesto que no te deja visualizarlo, esa no es la funcionalidad de una pila. No estás usando la estructura correcta (o al menos la más eficiente) para hacerlo.
Para ingresar y extraer exactamente en el orden en que ingresaste el dato, es mejor usar una Cola (First in, First out). La pila (First in, Last out) va extrayendo en base al último dato que ingresaste en ella, es decir, el tope.

terym

hola disculpen soy nueva en esto y me encontre con este foro q me parecio interesante y creo q me podria ayudar estoy implementando una pila
#include <stdio.h>
#include <stdlib.h>


  /* declaracion */
struct tpila{
  int clave;
  struct tpila *sig;
};
   /* prototipos e implementacion */

void crear(struct tpila **pila);
int vacia(struct tpila *pila);
void apilar(struct tpila *pila, int elem);
int desapilar(struct tpila *pila,int *elem);
void imprimirpila( struct tpila *ptrActual,struct tpila *pila);


void imprimirpila( struct tpila *ptrActual,struct tpila *pila)
{


    printf( "La pila es:\n\n" );


    while ( ptrActual != NULL) {
        printf( "%d -> ", ptrActual->clave );
       ptrActual= pila->sig;
       pila->sig= ptrActual;
       system("pause");



    }
     printf( "apunta a null\n" );


}




void crear(struct tpila **pila)
{  *pila = (struct tpila *) malloc(sizeof(struct tpila));

  (*pila)->sig = NULL;

  printf("pila creada\n");
}

int vacia(struct tpila *pila){
  return (pila->sig == NULL);
}

void apilar(struct tpila *pila, int elem){
  struct tpila *nuevo;

  nuevo = (struct tpila *) malloc(sizeof(struct tpila));


  nuevo->clave = elem;
   nuevo->sig = pila->sig;
  pila->sig = nuevo;
}

int desapilar(struct tpila *pila,int *elem){
  struct tpila *aux;


  aux = pila->sig;
  *elem= aux->clave;
  pila->sig = aux->sig;
  free(aux);
  return *elem;
}

   /* programa de prueba */
int main(void)
{
  struct tpila *pila;
  int elem,opc,reg;
  crear(&pila);

do{
  printf("que deseas hacer  1)apilar 2)desapilar 3)imprimir\n");
  scanf("%d",&opc);


  switch(opc){

    case 1:

    printf("introduce el numero a apilar");
      scanf("%d",&elem);
     apilar(pila,elem);
   printf("pulse la tecla 5 para regresar al menu principal");
    scanf("%d",&reg);
    break;

    case 2:
    if(!vacia(pila)){
     desapilar(pila,&elem);
     printf( "elemento retirado\n");
    }
                else
                    printf( "La pila esta vacia\n" );
                break;

    case 3:
    if ( !vacia( pila ) )
    imprimirpila( pila );
                else
                    printf( "La pila esta vacia\n" );
                    printf("pulse la tecla 5 para regresar al menu principal");
    scanf("%d",&reg);
                break;

    }

}
  while(reg==5);
return 0;



}
les vuelvo a comentar soy principiante si alguien me podri ayudar les agradeceria mucho el error esta ala hora de imprimir no me imprime todos los elementos de la lista le dejo mi correo por detecta el error terezza_31@hotmail.com

RyogiShiki

éste hilo lleva innactivo más de un mes. No está perimitido revivir hilos antiguos. Lo mejor es que crees un nuevo tema, Y cuando bayas a colocar el código hazlo usando GeSHi (extremo superior derecho de las herramientas de edición de un mensaje)

Saludos


x64core

#13
En la funcion de imprimir e falta un parametro que es el puntero donde se encuentra una instruccion de la pila
en ensamblador seria el registro BP

tambie otra cosa... la declaracion de los prototipos se usa para indicarle al compilador que en
algunas parte se encuentran dichas funciones en el archivo fuente... los prototipos se pueden
omitir si las funciones estan declaradas antes de la funcion main...