0% encontró este documento útil (0 votos)
69 vistas17 páginas

Implementación de Listas Ligadas en C++

Este documento presenta un proyecto de programación que implementa funciones básicas de listas ligadas como vaciar, insertar al inicio e insertar por posición, eliminar por posición y anular. El programa muestra un menú con estas opciones y permite al usuario realizar operaciones sobre una lista ligada de personas almacenando su código, nombre, edad y dirección. El código fuente implementa las funciones requeridas y el programa funciona correctamente según lo esperado.

Cargado por

Ivan nudel
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
69 vistas17 páginas

Implementación de Listas Ligadas en C++

Este documento presenta un proyecto de programación que implementa funciones básicas de listas ligadas como vaciar, insertar al inicio e insertar por posición, eliminar por posición y anular. El programa muestra un menú con estas opciones y permite al usuario realizar operaciones sobre una lista ligada de personas almacenando su código, nombre, edad y dirección. El código fuente implementa las funciones requeridas y el programa funciona correctamente según lo esperado.

Cargado por

Ivan nudel
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Universidad de Guadalajara

Centro Universitario de Ciencias Exactas e


Ingenierías

Nombre: Esparza Medina Ricardo

Código de estudiante: 303521095

Correo institucional: ricardo.esparza2109@[Link]

Fecha entrega tarea: 26 octubre 2021

Ciclo: 21B

Materia: Seminario de Solución de Problemas de Estructuras de


Datos I

Horario: Martes y jueves 17:00hrs. a 18:55hrs.

Sección D13

Nombre profesor: Valdés López Julio Esteban


Introducción
El proyecto tiene como objetivo implementar las funciones de las listas ligadas,
que son vacía, insertar al inicio, insertar por posición, eliminar por posición, y anular.

Funcionamiento del programa


Inicia el programa mostrando el menu con cada una de las funciones:

Si la lista está vacía, la opción 1 mostrará que lo esta.


Se insertan al inicio 2 personas a la lista.
Se imprime la lista mostrando las 2 personas que se insertaron.
Se ingresa una persona más en la posición 1.

Se imprime nuevamente la lista.


Se elimina por posicion y se imprime nuevamente la lista.
Nuevamente se elimina por posición y se imprime la lista con los elementos restantes.
Se anula la lista con todos los elementos faltantes y se imprime de nuevo.

Salir del programa


CODIGO FUENTE
1 #include <iostream>
2
3 using namespace std;
4
5 typedef struct Persona
6 {
7 unsigned int codigo;
8 char nombre[30];
9 unsigned int edad;
10 char direccion[40];
11 }P;
12
13 struct Nodo
14 {
15 P dato;
16 struct Nodo *siguiente;
17 };
18
19 void inicializa (struct Nodo *&l);
20 bool vacia (struct Nodo *l);
21 void anula (struct Nodo *&l);
22 int contar_elementos(struct Nodo *l);
23 void insertar_i (struct Nodo *&l, P d);
24 void insertar_p(struct Nodo *&l, P d, int posicion);
25 void eliminar(struct Nodo *&l, int posicion);
26 void imprimir (struct Nodo *l);
27 P solicitar_elemento();
28
29
30 int main ()
31 {
32 struct Nodo *ancla;
33 inicializa(ancla);
34 int opcion = 0,posicion,tam;
35 P registro;
36
37 do
38 {
39 cout << "Menu:" << endl;
40 cout << " 1): verificar lista vacia." << endl;
41 cout << " 2): insertar al inicio." << endl;
42 cout << " 3): insertar elemento por posicion." << endl;
43 cout << " 4): eliminar elemento por posicion." << endl;
44 cout << " 5): anular lista." << endl;
45 cout << " 6): imprimir lista." << endl;
46 cout << " 0): salir del programa." << endl;
47 cout << "Selecciona una opcion:";
48 cin >> opcion;
49 system("cls");
50
51 switch (opcion)
52 {
53 case 0:
54 cout << "Adios!" << endl;
55 break;
56
57 case 1:
58 if (vacia (ancla))
59 cout << "Lista Vacia" << endl;
60 else
61 cout << "Lista No Vacia" << endl;
62 break;
63
64 case 2:
65 registro = solicitar_elemento();
66 insertar_i (ancla, registro);
67 break;
68
69 case 3:
70 if(vacia(ancla))
71 {
72 cout << "Lista Vacia no se puede ingresar por posicion" << endl;
73 break;
74 }
75 tam = contar_elementos(ancla);
76 do
77 {
78 cout<<"\nIngresa posicion donde se insertara:";
79 cin>>posicion;
80 if(posicion>=tam+1|| posicion<0)
81 {
82 cout<<"\nPosicion invalida, ingrese una posicion correcta.";
83 }
84 }while(posicion>=tam+1|| posicion<0);
85 registro = solicitar_elemento();
86 insertar_p(ancla,registro,posicion);
87
88 break;
89
90 case 4:
91 if(vacia(ancla))
92 {
93 cout << "Lista Vacia no se puede eliminar por posicion" << endl;
94 break;
95 }
96 tam = contar_elementos(ancla);
97 do
98 {
99 cout<<"\nIngresa posicion donde se eliminara:";
100 cin>>posicion;
101 if(posicion>=tam|| posicion<0)
102 {
103 cout<<"\nPosicion invalida, ingrese una posicion correcta.";
104 }
105 }while(posicion>=tam|| posicion<0);
106 eliminar(ancla,posicion);
107 break;
108
109 case 5:
110 anula(ancla);
111 break;
112
113 case 6:
114 imprimir (ancla);
115 break;
116
117 default:
118 cout << "Opcion Incorrecta!!!" << endl;
119 break;
120 }
121
122 }while (opcion != 0);
123
124 return 0;
125 }
126
127 void inicializa (struct Nodo *&l)
128 {
129 l = NULL;
130 }
131
132 bool vacia (struct Nodo *l)
133 {
134
135 return l == NULL;
136 }
137
138 void insertar_i (struct Nodo *&l, P d)
139 {
140 struct Nodo *aux = NULL;
141 aux = new struct Nodo;
142
143 if (aux != NULL)
144 { //si no hay espacio en memoria new puede regresar nulo
145 aux->dato = d;
146 aux->siguiente = l;
147 l = aux;
148 }
149 else
150 {
151 //error de lista llena
152 }
153 }
154
155 void imprimir (struct Nodo *l)
156 {
157 cout << "\n\tancla\n\t| ";
158 cout << "\n\tv";
159 while (l != NULL)
160 {
161 cout <<"\n codigo:"<<l->[Link]<<"\n nombre:"<<l->[Link]<<"\n edad:"<<l->[Link]<<"\n direccion:"<<l->[Link];
162 cout <<"\n\t|";
163 cout <<"\n\tv";
164 l = l->siguiente;
165 }
166 cout << "\n\tnullptr" << endl << endl;
167 }
168
169 void anula (struct Nodo *&l)
170 {
171 if (vacia (l))
172 {
173 //no hacer nada (caso base de nuestra recursividad)
174 }
175 else
176 {
177 anula (l->siguiente);
178 delete l;
179 l = NULL;
180 }
181 }
182
183
184 P solicitar_elemento()
185 {
186 P registro;
187 cout<<"\nINGRESA NUEVA PERSONA:\n";
188 cout << "\nIngresa codigo: ";
189 cin >> [Link];
190 [Link]();
191 cout << "\nIngresa nombre: ";
192 cin >> [Link];
193 cout << "\nIngresa edad: ";
194 cin >> [Link];
195 [Link]();
196 cout << "\nIngresa direccion: ";
197 cin >> [Link];
198 return registro;
199 }
200
201
202 int contar_elementos(struct Nodo *l)
203 {
204 int n=0;
205 while (l != NULL)
206 {
207 n++;
208 l = l->siguiente;
209 }
210 return n;
211 }
212
213 void insertar_p(struct Nodo *&l, P d, int posicion)
214 {
215 int n = 0;
216 struct Nodo *aux = NULL;
217 aux = new struct Nodo;
218 struct Nodo *aux2 = NULL;
219 aux2 = new struct Nodo;
220 struct Nodo *nuevo = NULL;
221 nuevo = new struct Nodo;
222 aux = l;
223
224 if(posicion == 0)
225 {
226 cout<<"\nPrimero"<<endl;
227 insertar_i(l,d);
228 return;
229 }
230 else if(posicion == contar_elementos(l)+1)
231 {
232 cout<<"\nULTIMO"<<endl;
233 while(aux->siguiente!=NULL)
234 {
235 aux = aux->siguiente;
236 n++;
237 }
238 nuevo->dato = d;
239 aux->siguiente = nuevo;
240 return;
241 }
242 else
243 {
244 cout<<"\nPOS:"<<posicion<<endl;
245 for(int i=0;i<posicion;i++)
246 {
247 aux2 = aux;
248 aux = aux->siguiente;
249 }
250 }
251
252 if (nuevo != NULL)
253 {
254 nuevo->dato = d;
255 aux2->siguiente = nuevo;
256 nuevo->siguiente = aux;
257 }
258 }
259
260 void eliminar(struct Nodo *&l, int posicion)
261 {
262 int n = 0;
263 struct Nodo *aux = NULL;
264 aux = new struct Nodo;
265 struct Nodo *aux2 = NULL;
266 aux2 = new struct Nodo;
267 aux = l;
268
269 for(int i=0;i<posicion;i++)
270 {
271 aux2 = aux;
272 aux = aux->siguiente;
273 }
274 aux2->siguiente = aux->siguiente;
275 delete(aux);
276 }
Conclusión
El resultado del programa es el esperado y concuerda con las instrucciones que indicó el profesor. Este proyecto ya fue más
fácil desde mi parecer y con el cual pude encontrar más herramientas que me ayudaron a concluirlo, además de las proporcionadas
por el profesor.

También podría gustarte