Computer Programming">
Nothing Special   »   [go: up one dir, main page]

Cortes-Flores-Jonatan - Practica 5

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 14

Universidad de Guadalajara

Nombre: Cortes Flores Jonatan


Carrera: INNI
Materia: Seminario de Estructuras de Datos l
Sección: D13

Clave: I5887
Maestro: Valdez López Julio Esteban
Introducción
Les mostrare a continuación el desarrollo de la practica número 4 con la cual
el profesor nos indicó complementar un código proporcionado por el mismo
completando las funciones de agregar por posición y eliminar por posición
con esto para aprender a manejar las listas enlazadas con cabeceras
agregando las funciones de las pilas y colas.
-Empezamos un un menú que nos da las opciones para hacer en la lista.

-Si escogemos la primera opción nos mostrara si la lista esta vacía o no .


-Con la segunda opción podremos agregar datos a la lista desde el inicio pidiéndonos los
datos de la persona para agregar .

-Con la tercera opción podremos agregar un nuevo dato a la lista pero ahora debemos
proporcionar la posición de este en la lista así se agregara en ella.
-Con la sexta opción imprimiremos todo el contenido de nuestra lista de forma asendemte.

-Con la cuarta opción podremos eliminar un dato en la lista por medio de la posición que le
agregamos a esta .
-Aquí se nos muestra como la posición elegida ha sido eliminada.
-Con la opción 5 borraremos todo el contenido de nuestra lista dejándola totalmente vacia.

-Como se muestra aquí.

-Con la última opción podremos salir del programa .

Código:
1 #include <iostream>
2 using namespace std;
3
4 typedef struct Persona
5 {
6 unsigned int codigo;
7 char nombre[30];
8 unsigned int edad;
9 char direccion[40];
10 }P;
11 struct Nodo
12 {
13 P dato;
14 struct Nodo *siguiente;
15 };
16 void inicializa (struct Nodo *&l,struct Nodo *&f);
17 bool vacia (struct Nodo *l);
18 void anula (struct Nodo *&l);
19 int contar_elementos(struct Nodo *l);
20 void insertar_i (struct Nodo *&l,struct Nodo *&f, P d);
21 void insertar_p(struct Nodo *&l,struct Nodo *&f, P d, int posicion);
22 void eliminar(struct Nodo *&l,struct Nodo *&f, int posicion);
23 void imprimir (struct Nodo *l);
24 P solicitar_elemento();
25 void push(struct Nodo *&l,struct Nodo *&f,P d);
26 void pop(struct Nodo *&l,struct Nodo *&f);
27 P top(struct Nodo *l);
28 void queue(struct Nodo *&l,struct Nodo *&f,P d);
29 void deque(struct Nodo *&l,struct Nodo *&f);
30 P front(struct Nodo *l,struct Nodo *f);
31 int main ()
32 {
33 struct Nodo *ancla,*final;
34 inicializa(ancla,final);
35 int opcion = 0,posicion,tam;
36 P registro,dato;
37 do
38 {
39 cout << "\t\tLista" << endl;
40 cout << "\nMenu de opciones:\n" << endl;
41 cout << " 1) Verificar lista vacia." << endl;
42 cout << " 2) Insertar al inicio." << endl;
43 cout << " 3) Insertar elemento por posicion." << endl;
44 cout << " 4) Eliminar elemento por posicion." << endl;
45 cout << " 5) Funcion push." << endl;
46 cout << " 6) Funcion pop." << endl;
47 cout << " 7) Funcion top." << endl;
48 cout << " 8) Encolar un elemento." << endl;
49 cout << " 9) Desencolar un elemento." << endl;
50 cout << " 10) Mostrar frente." << endl;
51 cout << " 11) Anular lista." << endl;
52 cout << " 12) Imprimir lista." << endl;
53 cout << " 0) Salir del programa." << endl;
54 cout << "\nSelecciona una opcion:";
55 cin >> opcion;
56 switch (opcion)
57 {
58 case 0:
59 cout << "\n\n\tSaldra del programa. Adios!\n\n" << endl;
60 system("pause");
61 system("cls");
62 break;
63 case 1:
64 if (vacia (ancla))
65 cout << "\n\t\tLista Vacia\n" << endl;
66 else
67 cout << "\n\t\tLista No Vacia\n" << endl;
68 system("pause");
69 system("cls");
70 break;
71 case 2:
72 registro = solicitar_elemento();
73 insertar_i (ancla,final, registro);
74 system("pause");
75 system("cls");
76 break;
77 case 3:
78 if(vacia(ancla))
79 {
80 cout << "\nLista vacia, no se puede ingresar por posicion\n" << endl;
81 system("pause");
82 system("cls");
83 break;
84 }
85 tam = contar_elementos(ancla);
86 do
87 {
88 cout<<"\nIngresa posicion donde se insertara:";
89 cin>>posicion;
90 if(posicion>=tam+1|| posicion<0)
91 {
92 cout<<"\n\tPosicion invalida, ingrese una posicion correcta.\n";
93 }
94 }while(posicion>=tam+1|| posicion<0);
95 registro = solicitar_elemento();
96 insertar_p(ancla,final,registro,posicion);
97 system("pause");
98 system("cls");
99 break;
100 case 4:
101 if(vacia(ancla))
102 {
103 cout << "\nLista Vacia, no se puede eliminar por posicion\n" << endl;
104 break;
105 }
106 tam = contar_elementos(ancla);
107 do
108 {
109 cout<<"\nIngresa posicion donde se eliminara:";
110 cin>>posicion;
111 if(posicion>=tam|| posicion<0)
112 {
113 cout<<"\n\tPosicion invalida, ingrese una posicion correcta.\n";
114 }
115 }while(posicion>=tam|| posicion<0);
116 eliminar(ancla,final,posicion);
117 system("pause");
118 system("cls");
119 break;
120 case 5:
121 registro = solicitar_elemento();
122 push(ancla,final, registro);
123 system("pause");
124 system("cls");
125 break;
126 case 6:
127 if(vacia(ancla))
128 {
129 cout << "\n\tLista Vacia, no se puede hacer la funcion pop\n" << endl;
130 break;
131 }
132 else
133 {
134 pop(ancla,final);
135 }
136 system("pause");
137 system("cls");
138 break;
139 case 7:
140 dato = top(ancla);
141 if(dato.codigo!=404)
142 {
143 cout <<"\n Codigo:"<<dato.codigo<<"\n Nombre:"<<dato.nombre<<"\n
Edad:"<<dato.edad<<"\nDireccion:"<<dato.direccion<<endl;
144 }
145 system("pause");
146 system("cls");
147 break;
148 case 8:
149 registro = solicitar_elemento();
150 queue(ancla,final, registro);
151 system("pause");
152 system("cls");
153 break;
154 case 9:
155 if(vacia(ancla))
156 {
157 cout << "\n\tLista Vacia, no se puede desencolar\n" << endl;
158 break;
159 }
160 else
161 {
162 deque(ancla,final);
163 }
164 system("pause");
165 system("cls");
166 break;
167 case 10:
168 dato = front(ancla,final);
169 if(dato.codigo!=404)
170 {
171 cout <<"\n Codigo:"<<dato.codigo<<"\n Nombre:"<<dato.nombre<<"\n
Edad:"<<dato.edad<<"\nDireccion:"<<dato.direccion<<endl;
172 }
173 system("pause");
174 system("cls");
175 break;
176 case 11:
177 anula(ancla);
178 final = NULL;
179 system("pause");
180 system("cls");
181 break;
182 case 12:
183 imprimir (ancla);
184 break;
185 default:
186 cout << "\n\t\tOpcion Incorrecta!!!\n" << endl;
187 system("pause");
188 system("cls");
189 break;
190 }
191 }while (opcion != 0);
192 return 0;
193 }
194 void inicializa (struct Nodo *&l,struct Nodo *&f)
195 {
196 l = NULL;
197 f = NULL;
198 }
199 bool vacia (struct Nodo *l)
200 {
201 return l == NULL;
202 }
203 void insertar_i (struct Nodo *&l,struct Nodo *&f, P d)
204 {
205 struct Nodo *aux = NULL;
206 aux = new struct Nodo;
207 if (aux != NULL)
208 {
209 aux->dato = d;
210 aux->siguiente = l;
211 if(vacia(l))
212 {
213 f = aux;
214 }
215 l = aux;
216 }
217 else
218 {
219 }
220 }
221 void imprimir (struct Nodo *l)
222 {
223 cout << "\n\tinicio\n\t| ";
224 cout << "\n\tv";
225 while (l != NULL)
226 {
227 cout <<"\n Codigo:"<<l->dato.codigo<<"\n Nombre:"<<l->dato.nombre<<"\n Edad:"<<l-
>dato.edad<<"\n Direccion:"<<l->dato.direccion;
228 if(l->siguiente == NULL)
229 {
230 cout << "\t<-final";
231 }
232 cout <<"\n\t|";
233 cout <<"\n\tv";
234 l = l->siguiente;
235 }
236 cout << "\n\tnullptr" << endl << endl;
237 }
238 void anula (struct Nodo *&l)
239 {
240 if (vacia (l))
241 {
242 }
243 else
244 {
245 anula (l->siguiente);
246 delete l;
247 l = NULL;
248 }
249 }
250 P solicitar_elemento()
251 {
252 P registro;
253 cout<<"\nINGRESA NUEVA PERSONA:\n";
254 cout << "\nIngresa Codigo: ";
255 cin >> registro.codigo;
256 cin.ignore();
257 cout << "\nIngresa Nombre: ";
258 cin >> registro.nombre;
259 cout << "\nIngresa Edad: ";
260 cin >> registro.edad;
261 cin.ignore();
262 cout << "\nIngresa Direccion: ";
263 cin >> registro.direccion;
264 return registro;
265 }
266 int contar_elementos(struct Nodo *l)
267 {
268 int n=0;
269 while (l != NULL)
270 {
271 n++;
272 l = l->siguiente;
273 }
274 return n;
275 }
276 void insertar_p(struct Nodo *&l,struct Nodo *&f, P d, int posicion)
277 {
278 int n = 0,t;
279 struct Nodo *aux = NULL;
280 aux = new struct Nodo;
281 struct Nodo *aux2 = NULL;
282 aux2 = new struct Nodo;
283 struct Nodo *nuevo = NULL;
284 nuevo = new struct Nodo;
285 aux = l;
286 t = contar_elementos(l);
287 if(posicion == 0)
288 {
289 cout<<"\nPrimero"<<endl;
290 insertar_i(l,f,d);
291 return;
292 }
293 else
294 {
295 cout<<"\nPOS:"<<posicion<<"TAM:"<<t<<endl;
296 for(int i=0;i<posicion;i++)
297 {
298 aux2 = aux;
299 aux = aux->siguiente;
300 }
301 }
302 if (nuevo != NULL)
303 {
304 nuevo->dato = d;
305 aux2->siguiente = nuevo;
306 nuevo->siguiente = aux;
307 if(posicion==t)
308 {
309 f = nuevo;
310 }
311 }
312 }
313 void eliminar(struct Nodo *&l,struct Nodo *&f, int posicion)
314 {
315 int n = 0,t;
316 struct Nodo *aux = NULL;
317 aux = new struct Nodo;
318 struct Nodo *aux2 = NULL;
319 aux2 = new struct Nodo;
320 aux = l;
321 t = contar_elementos(l);
322 for(int i=0;i<posicion;i++)
323 {
324 aux2 = aux;
325 aux = aux->siguiente;
326 }
327 if(posicion == t-1)
328 {
329 f = aux2;
330 }
331 aux2->siguiente = aux->siguiente;
332 delete(aux);
333 }
334 void push(struct Nodo *&l,struct Nodo *&f,P d)
335 {
336 insertar_i(l,f,d);
337 }
338 void pop(struct Nodo *&l,struct Nodo *&f)
339 {
340 struct Nodo *aux = NULL;
341 aux = new struct Nodo;
342 if (vacia (l))
343 {
344 }
345 else
346 {
347 aux = l;
348 l = l->siguiente;
349 if(l==NULL)
350 {
351 f = NULL;
352 }
353 delete aux;
354 aux = NULL;
355 }
356 }
357 P top(struct Nodo *l)
358 {
359 struct Nodo *aux = NULL;
360 aux = new struct Nodo;
361 P paux;
362 if (vacia (l))
363 {
364 cout<<"\n\tLista vacia.\n";
365 paux.codigo = 404;
366 return paux;
367 }
368 else
369 {
370 aux = l;
371 return aux->dato;
372 }
373 }
374 void queue(struct Nodo *&l,struct Nodo *&f,P d)
375 {
376 struct Nodo *aux = NULL;
377 aux = new struct Nodo;
378 aux->dato = d;
379 aux->siguiente = NULL;
380 if(f!=NULL)
381 {
382 f->siguiente = aux;
383 }
384 f = aux;
385 if(l==NULL)
386 {
387 l = aux;
388 }
389 }
390 void deque(struct Nodo *&l,struct Nodo *&f)
391 {
392 struct Nodo *aux = NULL;
393 aux = new struct Nodo;
394 if (vacia (l))
395 {
396 }
397 else
398 {
399 aux = l;
400 l = l->siguiente;
401 if(l==NULL)
402 {
403 f = NULL;
404 }
405 delete aux;
406 aux = NULL;
407 }
408 }
409 P front(struct Nodo *l,struct Nodo *f)
410 {
411 struct Nodo *aux = NULL;
412 aux = new struct Nodo;
413 P paux;
414 if (vacia (l))
415 {
416 cout<<"\n\tLista vacia.\n";
417 paux.codigo = 404;
418 return paux;
419 }
420 else
421 {
422 aux = f;
423 return aux->dato;
424 }
425 }
Conclusión
Al realizar esta práctica me queda más claro la elaboración que lleva las lista
con cabecera su funcionamiento y como se desarrollan cada una de las
opciones disponibles.

También podría gustarte