Hola que tal, tengo una tarea de eliminar un elemento de una lista enlazada por cola, pila y por búsqueda y le batalle mucho para hacerlo con cola y pila pero por búsqueda no me sale por mas que lo intente, Aquí les dejo el código haber si me pueden echar la mano. Saludos y gracias de antemano
Código C++:
Ver original#include <iostream>
using namespace std;
class Nodo {
public:
Nodo();
void capturar();
void mostrar();
void buscar( int );
void eliminar_cola();
void eliminar_pila();
void eliminar_busqueda( int );
private:
int num;
Nodo * inicio;
Nodo * siguiente;
Nodo * anterior;
Nodo * fin;
} n, *z;
Nodo::Nodo() {
inicio = NULL;
fin = NULL;
}
void Nodo::capturar() {
if( inicio == NULL ) {
z = new Nodo;
inicio = z;
fin = inicio;
cout << "Inserta un numero: "; cin >> z -> num;
z -> siguiente = NULL;
} else {
z = new Nodo;
cout << "Inserta un numero: "; cin >> z -> num;
z -> siguiente = NULL;
fin -> siguiente = z;
fin = z;
}
}
void Nodo::mostrar() {
if( inicio == NULL ) {
cout << "Lista vacia" << endl;
} else {
Nodo * aux1 = inicio;
while( aux1 != NULL ) {
cout << aux1 -> num << endl;
aux1 = aux1 -> siguiente;
}
}
}
void Nodo::buscar( int b_num ) {
Nodo * aux1;
int contador = 0;
if( inicio == NULL ) {
cout << "Lista vacia" << endl;
} else {
aux1 = inicio;
while( aux1 != NULL ) {
if( b_num == aux1 -> num ) {
contador++;
if( contador == 1 ) {
cout << "Numeros encontrados: " << endl;
}
cout << aux1 -> num << endl;
aux1 = aux1 -> siguiente;
} else {
aux1 = aux1 -> siguiente;
}
}
}
if( contador == 0 ) {
cout << "\nNumero no encontrado" << endl;
}
}
void Nodo::eliminar_cola() {
Nodo * aux1 = inicio;
if( inicio == NULL ) {
cout << "Lista vacia" << endl;
} else {
if( inicio == fin ) {
aux1 = NULL;
inicio = NULL;
fin = inicio;
delete aux1;
cout << "El primer elemento de la lista se ha borrado correctamente" << endl;
aux1 = NULL;
} else {
aux1 = inicio;
inicio = inicio -> siguiente;
aux1 -> siguiente = NULL;
delete aux1;
cout << "El primer elemento de la lista se ha borrado correctamente" << endl;
aux1 = NULL;
}
}
}
void Nodo::eliminar_pila() {
Nodo * aux1 = inicio;
if( inicio == NULL ) {
cout << "Lista vacia" << endl;
} else {
if( inicio == fin ) {
aux1 = NULL;
inicio = NULL;
fin = inicio;
delete aux1;
cout << "El ultimo elemento de la lista se ha borrado correctamente" << endl;
aux1 = NULL;
} else {
anterior = inicio;
aux1 = inicio -> siguiente;
while( aux1 != fin ) {
aux1 = aux1 -> siguiente;
anterior = anterior -> siguiente;
}
fin = anterior;
delete aux1;
cout << "El ultimo elemento de la lista se ha borrado correctamente" << endl;
aux1 = NULL;
fin -> siguiente = NULL;
}
}
}
// ESTE ES EL ELIMINAR QUE NO ME SALE
void Nodo::eliminar_busqueda( int b_num ) {
Nodo * aux1;
int contador = 0;
if( inicio == NULL ) {
cout << "Lista vacia" << endl;
} else {
aux1 = inicio;
while( aux1 != NULL ) {
if( b_num == aux1 -> num ) {
contador++;
delete aux1 ;
aux1 = aux1 -> siguiente;
} else {
aux1 = aux1 -> siguiente;
}
}
}
if( contador == 0 ) {
cout << "\nNumero no encontrado" << endl;
}
}
enum MENU_PRINCUPAL { CAPTURAR = 1, MOSTRAR, BUSCAR, ELIMINAR, SALIR };
enum SUBMENU_ELIMINAR { COLA = 1, PILA, BUSQUEDA, REGRESAR };
main() {
int opcion, b_num;
do {
cout << "1) CAPTURAR" << endl;
cout << "2) MOSTRAR" << endl;
cout << "3) BUSCAR" << endl;
cout << "4) ELIMINAR" << endl;
cout << "5) SALIR" << endl;
cout << "\nOPCION: "; cin >> opcion;
switch( opcion ) {
case CAPTURAR:
cout << "\n";
n.capturar();
cout << "\n";
break;
case MOSTRAR:
cout << "\n";
n.mostrar();
cout << "\n";
break;
case BUSCAR:
cout << "\nBuscar numero: "; cin >> b_num;
n.buscar( b_num );
cout << "\n";
break;
case ELIMINAR:
cout << "\n";
do {
cout << "1) ELIMINAR POR COLA" << endl;
cout << "2) ELIMINAR POR PILA" << endl;
cout << "3) ELIMINAR POR BUSQUEDA" << endl;
cout << "4) REGRESAR" << endl;
cout << "\nOPCION: "; cin >> opcion;
switch( opcion ) {
case COLA:
cout << "\n";
n.eliminar_cola();
cout << "\n";
break;
case PILA:
cout << "\n";
n.eliminar_pila();
cout << "\n";
break;
case BUSQUEDA:
cout << "\nNumero a eliminar: "; cin >> b_num;
n.eliminar_busqueda( b_num );
cout << "\n";
break;
default:
opcion = REGRESAR;
}
} while( opcion != REGRESAR );
cout << "\n";
break;
default:
opcion = SALIR;
}
} while( opcion != SALIR );
return 0;
}