Aqui les dejo una pila en c++ con memoria dinamica, esta echa con una lista doblemente enlazada, espero que les sirva!
primero declaramos nuestra estructura con los elementos que va a tener


struct lista{
int dato;
lista *ant;
lista *sig;
};

insertar datos

aki en la primera vuelta nos va a crear un nodo llamado inicio que contine dos punteros y un espacio para un entero, el puntero llamado "ant" que apunta a NULL y otro llamado "sig" que tambien apunta a NULL


if(inicio==NULL){
inicio=new lista;
printf("ingresa dato " );
scanf("%d",&inicio->dato) ;
inicio->sig=NULL;
inicio->ant=NULL;
aux=inicio;
aux1=inicio;
}
else{
aux=new lista;
printf("ingresa dato " );
scanf("%d",&aux->dato);
aux->sig=NULL;
aux1->sig=aux;
aux->ant=aux1;
aux1=aux;
}

en la segunda vuelta ya la condicion de inicio==NULL ya no se cumple asi que va a pasar al "else", ahi va a crear otro nodo llamado "aux" y lo va a enlazar con el nodo anterior que se llama "aux1"


Para borrar

aux=aux1;
aux1=aux->ant;
aux=NULL;
aux1->sig=NULL;
aux=aux1;
aux va a moverse asta el ultimo nodo que actualmente se llama aux1, despues aux1 va a moverse al nodo anterior, entonces queda aux1 y sigue aux, ahora solo liberamos aux y ese nodo ya queda eliminado , ahora regresamos a aux a donde esta aux1 por si queremos seguir eliminando


imprimir

aux=inicio;
while(aux!=NULL){
printf(" %d ",aux->dato);
aux=aux->sig;
}
}
por ultimo para imprimir regresamos a al inicio de nuestra pila, de ahi partimos para ir imprimiendo nodo por nodo, con el while estamos aciendo que aux se imprima y que avance un nodo, y va terminar cuabndo aux ya no tenga valor



y aqui el codigo completo y validado


#include<stdio.h>
struct lista{
int dato;
lista *ant;
lista *sig;
};
int main(){
char a;
lista *inicio,*aux,*aux1;
inicio=NULL;
do{
printf("PILA 1-push 2-pop 3-imprimir 4-salir " );
scanf("%s",&a );
switch(a){
case '1':
if(inicio==NULL){
inicio=new lista;
printf("ingresa dato " );
scanf("%d",&inicio->dato);
inicio->sig=NULL;
inicio->ant=NULL;
aux=inicio;
aux1=inicio;
}
else{
aux=new lista;
printf("ingresa dato " );
scanf("%d",&aux->dato);
aux->sig=NULL;
aux1->sig=aux;
aux->ant=aux1;
aux1=aux;
}
break;
case '2':
if(inicio==NULL){
printf("no hay mas que borrar" );
}
else{
if(inicio==aux1){
inicio=NULL;
}
else{
aux=aux1;
aux1=aux->ant;
aux=NULL;
aux1->sig=NULL;
aux=aux1;
}
}
break;
case '3':
if(inicio==NULL){
printf("pila vacia" );
}
else{
aux=inicio;
while(aux!=NULL){
printf("%d",aux->dato);
aux=aux->sig;
}
}
break;
default: puts("esa no es una opcion intenta de nuevo" ) ;
}
}while(a!='4');
}
Datos archivados del Taringa! original
51puntos
4,179visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
7visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

l
lugotache🇦🇷
Usuario
Puntos0
Posts2
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.