Necesito eliminar un elemento de la pila pero conservando los nodos anteriores, tengo que pasar esos nodos a otra pila para eliminar el nodo que busco esto es lo que he hecho pero aun no me da. Hice el if
para buscarlo por la cédula no logro detectar que está mal, y el código después de la condición es lo que se supone me ayuda a mover los elementos a una nueva pila.
void pop3(pila *top,pila *top2, pila *elimino, int cedaux){
int cont=0;
cout<<"Cedula eliminado :"<<endl;
top2=top;
while(top->sig!=NULL){
if ((elimino->sig)->ci==cedaux){
cout<<"CEDULA ENCONTRADA: "<<endl;
cout<<"Cedula: "<<elimino->ci<<" Edad: "<<elimino->edad<<endl;
top=(top->sig)->sig;
elimino=elimino->sig;
top2->sig=NULL;
free(elimino);
cout<<"CEDULA ELIMINADA: "<<endl;
}
top2=top;
top=top->sig;
top2->sig=NULL;
elimino=top2;
top2=elimino;
}
if(top->sig==NULL){
cout<<"CEDULA NO ENCONTRADA: "<<endl;
}
}
Si me podrían explicar el error muchas gracias. Aquí está el código completo:
#include <iostream>
using namespace std;
struct pila
{
int ci;
int edad;
pila *sig;
};
// Funcion agregar nuevo nodo
pila *ne()
{ return((pila*)malloc(sizeof(struct pila)));
}
//Agregar datos
pila *push1(pila *top, pila *nuevo){
int control=0;
while(control==0){
nuevo=ne();
cout<<"ingresar CI: "<<endl;
cin>>nuevo->ci;
cout<<"ingresar EDAD: "<<endl;
cin>>nuevo->edad;
nuevo->sig=top;
top=nuevo;
cout<<"Para continuar tipee 0 de lo contrario otro numero : "<<endl;
cin>>control;
}
return top;
}
//Eliminar pila
void pop1(pila *top, pila *elimino){
while(elimino!=NULL){
elimino=top;
cout<<"Cedula: "<<elimino->ci<<" Edad: "<<elimino->edad<<endl;
top=top->sig;
free(elimino);
}
}
//Eliminar pila por cantidad
void pop2(pila *top, pila *elimino, int c){
int cont=0;
cout<<"nodos eliminados :"<<endl;
while(cont!=c){
elimino=top;
cout<<"Cedula: "<<elimino->ci<<" Edad: "<<elimino->edad<<endl;
top=top->sig;
free(elimino);
cont++;
}
}
//Eliminar no de la pila conservando los nodos anteriores
void pop3(pila *top,pila *top2, pila *elimino, int cedaux){
int cont=0;
cout<<"Cedula eliminado :"<<endl;
top2=top;
while(top->sig!=NULL){
if ((elimino->sig)->ci==cedaux){
cout<<"CEDULA ENCONTRADA: "<<endl;
cout<<"Cedula: "<<elimino->ci<<" Edad: "<<elimino->edad<<endl;
top=(top->sig)->sig;
elimino=elimino->sig;
top2->sig=NULL;
free(elimino);
cout<<"CEDULA ELIMINADA: "<<endl;
}
top2=top;
top=top->sig;
top2->sig=NULL;
elimino=top2;
top2=elimino;
}
if(top->sig==NULL){
cout<<"CEDULA NO ENCONTRADA: "<<endl;
}
}
int menupop(int b) {
system("cls");
cout<<"Indique opcion de insercón :"<<endl;
cout<<"1 eliminar pila"<<endl;
cout<<"2 eliminar pila por cantidad"<<endl;
cout<<"3 extraer conservando"<<endl;
//cout<<"4 al final"<<endl;
cout<<"ingrese opcion: ";
cin>>b;
return b;
}
int main() {
int b, c, pos,cedaux;
pila *top;
pila *nuevo;
pila *top2;
top=NULL;
top=push1(top,nuevo);
nuevo=top;
b=menupop(b);
switch(b){
case 1:
cout<<"eliminando toda la pila"<<endl;
pop1(top,nuevo);
break;
case 2:
cout<<"eliminando nodos de pila"<<endl;
cout<<"cuantos nodos a eliminar"<<endl;
cin>>c;
pop2(top,nuevo,c);
break;
case 3:
cout<<"eliminando Cedula de pila"<<endl;
cout<<"Cedula que desea eliminar"<<endl;
cin>>cedaux;
pop3(top,top2, nuevo,cedaux );
break;
}
return 0;
}