elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  como elimino el ultimo nodo de que ingrese( pila c++ )
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: como elimino el ultimo nodo de que ingrese( pila c++ )  (Leído 1,540 veces)
jorgecotrinax

Desconectado Desconectado

Mensajes: 28



Ver Perfil
como elimino el ultimo nodo de que ingrese( pila c++ )
« en: 30 Septiembre 2019, 02:12 am »

como elimino los últimos datos que ingrese, he visto muchos foros pero solo me los elimina del primero al ultimo  y yo quiero del ultimo al primero

Código:
#include<iostream>
using namespace std;
template<class T>
class Nodo {
public:
T dato;
Nodo<T>* siguiente;
Nodo(T x) {
dato = x;
siguiente = NULL;
}
};
template<class T>
class Pila {
public:
Nodo<T>* cabeza;
Nodo<T>* cola;
Pila() {
cabeza = NULL;
cola = NULL;
}
void insertarfinal(T x) {
Nodo<T>* nuevo = new Nodo<T>(x);
if (!cabeza) {
cabeza = nuevo;
}else {
Nodo<T>* aux = cabeza;
while (aux->siguiente)
{
aux = aux->siguiente;
}
aux->siguiente=nuevo
}
cola = nuevo;
}

void eliminarultimo() {
//como hago esto :c ....!!!!
}
void imprimir() {
Nodo<T>* aux = cabeza;
while (aux) {
cout << aux->dato << "-";
aux = aux->siguiente;
}
cout << endl;
}
};
int main() {
Pila<int> milista;
milista.insertarfinal(1);
milista.insertarfinal(2);
milista.insertarfinal(3);
milista.insertarfinal(4);
milista.insertarfinal(6);
milista.imprimir();
milista.eliminarultimo();
cout << endl;
milista.imprimir();
milista.eliminarultimo();
cout << endl;
milista.imprimir();
milista.eliminarultimo();
cout << endl;
milista.imprimir();
milista.eliminarultimo();
cout << endl;
system("pause");
}


« Última modificación: 7 Octubre 2019, 19:17 pm por jorgecotrinax » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: COMO ELIMINO EL ULTIMO NODO DE QUE INGRESE( pila C++ )
« Respuesta #1 en: 30 Septiembre 2019, 15:33 pm »

No tiene mucho sentido ya que la gracia de usar una Pila es insertar al principio en O(1) y eliminar del principio en O(1). Si insertas y eliminas por el final, las operaciones pasarán de ser O(1) a O(n)... pero si es lo que quieres, me limito a darte una opción.
Creas un nodo auxiliar que empezando en <cabeza> vaya avanzando hasta que <aux->siguiente> sea igual a <cola>. Entonces eliminas <cola> e igualas <cola> a <aux>. Cuidado con lo de "hasta que <aux->siguiente> sea igual a <cola>" ya que puedes tener dos elementos iguales pero que no sean el mismo. Tendrás que comprobarlo con sus direcciones de memoria.
Otra forma que se parecería un poco más a la estructura de una pila (aunque poco) es tener una función que devuelva el número de elementos de la pila. El típico <size()> del contenedor <stack> de la STL. Entonces lo mismo, avanzas con un puntero auxiliar hasta uno menos del último y haces lo mismo de antes.

PD: Tal y como quieres usarlo sería mejor usar listas doblemente enlazadas, en las que cada nodo tiene un puntero a siguiente y otro a anterior. La gracia de estas es trabajar con inserciones y borrados en ambos extremos en O(1). Así sólo tendrías que empezar en <cola>, crear un puntero auxiliar que apunte también a <cola>, hacer que <cola> apunte al anterior y borrar el auxiliar.


En línea

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

Desconectado Desconectado

Mensajes: 28



Ver Perfil
Re: COMO ELIMINO EL ULTIMO NODO DE QUE INGRESE( pila C++ )
« Respuesta #2 en: 30 Septiembre 2019, 16:09 pm »

ok muchísimas gracias   ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines