Dev - C++ - Listas simples

 
Vista:
sin imagen de perfil
Val: 18
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Listas simples

Publicado por Mr (6 intervenciones) el 28/03/2021 21:52:26
Tengo una duda tengo este código y entre muchos de los procedimientos que nos pidieron estaba el "Agregar en cualquier posición de la lista simple" ya pude hacer que se inserten al final o al inicio pero, como podría hacer para insertar en cualquier posición...

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
#include <string.h>
#include <iostream>
using namespace std;
/*struct tipopersona{
	int id;
	string descripcion;
}:*/
struct persona{
	string nombre,paterno, materno;
	int id, tipoPersona;
	float suledo, calif, credito;
	//tipoPersona tipo;
};
struct nodo{
	persona per;
	/*string nombre, paterno, materno;
	int id, tipoPersona;
	float sueldo, calif, credito;*/
	nodo *sig;
};
main (){
	//declarar el puntero para para nuevos nodos o reslado  y el de lista
	nodo *copiaNodo,*lista, *nuevoNodo;
	int r;// r=respuesta
	//inicializar lista
	lista= NULL;
	cout<<"Listas simples enlazadas "<<endl<<endl;
	//Verificar si la lista esta vacia
	do{
		nuevoNodo = new(nodo);
		//Solicitar datos al usuario
		cout<< "ID: ";cin>>nuevoNodo->per.id;
		cout<< "Nombre: ";cin>>nuevoNodo->per.nombre;
		cout<< "Apellido Paterno: ";cin>>nuevoNodo->per.paterno;
		cout<< "Apellido Materno: ";cin>>nuevoNodo->per.materno;
		cout<< "1-Alumno, 2-Empleado o 3-cliente:  ";cin>>nuevoNodo->per.tipoPersona;
		switch(nuevoNodo->per.tipoPersona){
			case 1:
				cout<<"Calificacion: ";cin>>nuevoNodo->per.calif; break;
			case 2:
				cout<<"Sueldo: ";cin>>nuevoNodo->per.suledo; break;
			case 3:
				cout<<"Credito: ";cin>>nuevoNodo->per.credito; break;
			default:
				cout<<"Opcion no valida ";
				nuevoNodo->per.calif-0;
				nuevoNodo->per.suledo-0;
				nuevoNodo->per.credito-0;
		}
		if(lista==NULL)
		{
			//Lista vacia
			//agregamos el nodo a la lista vacia
			nuevoNodo->sig=NULL;
			lista=nuevoNodo;
		}
		else{
			//Lista no esta vacia
			cout<<"Elige la forma insertar el nuevo elemento"<<endl;
			cout<<"1-Insertar al inicio "<<endl;
			cout<<"2-Insertar al final "<<endl;
			cout<<"3-Insertar en una posicion "<<endl;
			cout<<"Opcion: ";cin>>r;
			//agregamos el nodo a la lista
		switch(r){
			case 1:
				nuevoNodo->sig=lista;
				lista=nuevoNodo;
				break;
			case 2:
				//buscar el ultimo nodo de la lista
				while(lista!=NULL){
					copiaNodo =lista;
					lista= lista ->sig;
				}
			//nuevoNodo tiene que apuntar a null por ser agregado al final
			nuevoNodo->sig = NULL;
			//ultimo nodo tiene que apuntar a nuevo nodo
			copiaNodo->sig =nuevoNodo;
			break;
			case 3:
				cout<<" "<<endl;
				break;
			default:
				cout<<"Opcion no valida, no se agrego el elemento"<<endl;
		}
		}
		cout <<"¿Deseas agregar a otra persona? '1-Si' Cualquier otro numero es  'salir'  ";
		cin>>r;
	}
	while(r==1);
	//imprimir la lista
	cout<<	"Listado de personas"<<endl<<endl;
	while(lista!=NULL){
		cout<<"ID: "<<lista->per.id<<endl;
		cout<<"Nombre: "<<lista->per.nombre<<" "<<lista->per.paterno<<" "<<lista->per.materno;
		switch(lista->per.tipoPersona){
			case 1:
				cout<<endl<<"Alumno - Calificacion: "<<lista->per.calif<<endl;break;
			case 2:
				cout<<endl<<"Empleado - Sueldo: "<<lista->per.suledo<<endl;break;
			case 3:
				cout<<endl<<"CLiente - Credito: "<<lista->per.credito<<endl;break;
		}
		//Avanzar al siguiente elemento
		lista= lista->sig;
	}
}
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