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",®);
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",®);
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
#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",®);
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",®);
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