Dev - C++ - Consulta con elimiacion de nodos.

 
Vista:
sin imagen de perfil

Consulta con elimiacion de nodos.

Publicado por Juan (1 intervención) el 03/07/2018 23:09:35
Debo hacer que el siguiente codigo elimine todos los nombres si al ingresar por ejemplo "pepe", elimine todos y no solo uno, en la funcion eliminaNodo(), nose como hacerlo ayuda por favor.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#include <iostream>
#include <array>
#include <string>
const int N = 9;
using namespace std;
struct nodeList{
	string nombre = "";
	nodeList* next;
};
typedef struct nodeList nodo;
auto opciones() -> int{
	cout << "Menú opciones de Eliminación: " << endl;
	cout << "1. Al inicio" << endl;
	cout << "2. Identificando el nodo" << endl;
	cout << "3. El último (al final)" << endl;
	cout << "4. Salir del programa" << endl;
	cout << "Su opción? ";
	auto ingr = 0;
	cin >> ingr;
	return ingr;
}
auto menuEliminacion() -> int{
	auto ingreso = opciones();
	while(not(ingreso >= 1 and ingreso <=4)){
		cout << "Debe repetir el ingreso!!" << endl;
		ingreso = opciones();
	}
	return ingreso;
}
auto creaNodo(string nom,nodo** cabeza)->void{
	nodo* p = new nodo;
	p->nombre = nom;
	if(*cabeza == nullptr){
		p->next = *cabeza;
		*cabeza = p;
	}
	else{
		nodo* cola = *cabeza;
		while(cola->next != nullptr){
			cola = cola->next;
		}
		cola->next = p;
		cola = p;
	}
	return;
}
auto soloBlancos(string nom) -> bool{
	auto cierto = false;
	auto cuenta = 0;
	auto largo = nom.length();
	if(largo > 0){
		for(auto i = 0; i < largo; i++){
			if(nom.substr(i,1) == " "){
				cuenta += 1;
			}
		}
		if(cuenta == largo){
			cierto = true;
		}
	}
	return cierto;
}
auto eliminaNodo(int op,nodo** cabeza)->void{
	nodo* sigue = *cabeza;
	nodo* antes = *cabeza;
	string nom = "";
	cin.ignore();
	if(*cabeza == nullptr){
		cout << "La lista está vacía!!" << endl;
		exit(0);
	}
	else if(op == 1){
		*cabeza = sigue->next;
		sigue->next = nullptr;
	}
	else if (op == 2){
		cout << "Escriba el nombre de la persona que desea eliminar de la lista: ";
		getline(cin,nom);
		while(nom.length() == 0 or soloBlancos(nom)){
			cout << "Ingreso no válido" << endl;
			cout << "Escriba el nombre de la persona que desea eliminar de la lista: ";
			getline(cin,nom);
		}
		if(nom == sigue->nombre){
			*cabeza = sigue -> next;
		}
		else{
			while(sigue != nullptr and nom != sigue->nombre){
				antes = sigue;
				sigue = sigue->next;
			}
			if(sigue == nullptr){
				cout << "Recorrió la lista de nombres y no se encontró el nodo!!" << endl;
			}
			else{
				antes->next = sigue->next;
				sigue->next = nullptr;
			}
		}
	}
	else if(op == 3){
		if(sigue -> next == nullptr){
			*cabeza = sigue -> next;
		}
		else{
			while(sigue -> next != nullptr){
				antes = sigue;
				sigue = sigue -> next;
			}
			antes->next = nullptr;
			sigue->next = nullptr;
		}
	}
	else{
		exit(0);
	}
	return;
}
auto creaAsignaNodoDer(array <string,N> L,nodo** cabeza)->void{
	string nom = "";
	for(int i = 0; i < N; i++){
		creaNodo(L[i], cabeza);
	}
	return;
}
auto imprimeLista(string mensaje, nodo* cabeza) -> void{
	cout << mensaje << endl;
	nodo* sigue = cabeza;
	while(sigue != nullptr){
		cout << sigue->nombre <<"->";
		sigue = sigue->next;
	}
	cout << "nullptr" << endl;
	return;
}
auto main() -> int {
	array <string,N> Lista = {"pepe","juan","maría","javier","pepe","maría","fernando","pepe","javier"};
	nodo* miLista = nullptr;
	creaAsignaNodoDer(Lista,&miLista);
	imprimeLista("Lista original",miLista);
	auto opcion = menuEliminacion();
	while(opcion != 4){
		eliminaNodo(opcion,&miLista);
		imprimeLista("Nueva lista",miLista);
		if(miLista == nullptr){
			cout << "No puede seguir eliminando nodos!!" << endl;
			cout << "La lista está vacía!!" << endl;
			cout << "Finaliza el programa!!" << endl;
			exit(0);
		}
		else{
			opcion = menuEliminacion();
		}
	}
	return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder