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
0