Título: Problemas con eliminar en pilas Publicado por: suncry en 22 Junio 2017, 09:46 am Chicos soy nuevo en el grupo y no se si pueda poner este problema en esta sección pero necesito ayuda X_x, alguien podria decirme como eliminar un elemento de pila segun su posicion?, es decir en un lado aparece la posicion 1-2-3-4-5 y en el otro los numeros que estan alli, de momento ni tengo ni idea de como comenzar esa funcion y de momento solo tengo esto T_T
#include <iostream> #include <stdlib.h> #include <conio.h> using namespace std; struct Nodo { int Numero; Nodo *sgt; }; int acu = 0; int i ; void INP(Nodo *&, int ); //INP = Insertar numeros a la pila void VNP(Nodo *); //VNP = Ver numeros de la pila void BNP(Nodo *&, int &); //BNP = Borrar numeros de la pila int main (){ Nodo *pila = NULL; int Num , op ,Numero; int i = 0; while (op != 4){ system("cls"); cout << "1 - Ingrese datos a la pila" << endl; cout << "2 - Ver el listado de los datos en la pila " << endl; cout << "3 - Eliminar un numero en la pila (Seleccione la posicion a eliminar) " << endl; cout << "4 - Salir del programa" << endl; cin >> op; switch (op){ case 1 : system("cls"); cout << "ingrese un numero a la pila " << endl; cin >> Num; INP(pila,Num); acu = acu+1; break; case 2: system("cls"); VNP(pila); getch(); break; case 3: system("cls"); cout << "Ingrese la posicion a eliminar" << endl; cin >> Num; BNP(pila,Num); getch(); break; case 4: break; default: break; } } } void INP(Nodo *&pila, int dato ){ Nodo *NN = new Nodo(); // la doble N significa nuevo nodo NN->Numero = dato; NN->sgt = pila; pila = NN; cout <<"\nEl numero " << dato << " ha sido registrado en la pila " << endl; getch(); } void VNP(Nodo *pila){ int aux,i = 0; cout << "Posicion " << " Numero registrado" << endl; while (pila != NULL){ cout << " " << i+0; cout << " "<< pila->Numero << endl; pila = pila ->sgt; i++; } } Título: Re: Problemas con eliminar en pilas Publicado por: Serapis en 22 Junio 2017, 22:19 pm Cuando usas una pila programada por otro, sólo tienes disponible (habitualmente) los métodos Push y Pop... Entonces el unico modo de eliminar un elemento es llegar hasta él.
Operando con los datos que dices tener: Código: a.Push(1) 1º - Se pasan a otra pila los que estén encima: Código: b.push (a.pop) //5 2º - Se extrae el elemento que queríamos (hemos excavado hasta llegar a él, ahora está en la superficie, el pico ahora golpea en él) Código: a.Pop //3 3º Meter de nuevo los que estaban encima: Código: a.Push(b.Pop) //4 Ahora bien, cuando la pila la diseña uno mismo, ya provee un método interno para agilizar esto... La solución depende en realidad de la estructura usada para realizar la pila... Supongamos que fuera un array que es algo simple. Código: (privada) Funcion Delete(entero index) Fijate que en una pila incluso eliminar x elemento del final o vacíar la pila, se limita a ajusta el valor de la propiedad ItemsEnPila, para vaciarla se pone a 0 y listo... Título: Re: Problemas con eliminar en pilas Publicado por: suncry en 23 Junio 2017, 09:53 am la verdad andaba perdido muy bien en como hacerlo, pero gracias a esa logica que aplicaste logre aplicarsela a mi ejercicio y resulto bien haha, gracias tio!!
|