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

Cortes-Flores-Jonatan - Practica 4

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

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.
-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) Anular lista." << endl;
46 cout << " 6) Imprimir lista." << endl;
47 cout << " 0) Salir del programa." << endl;
48 cout << "\nSelecciona una opcion:";
49 cin >> opcion;
50 switch (opcion)
51 {
52 case 0:
53 cout << "\n\n\tSaldra del programa. Adios!\n\n" << endl;
54 break;
55 case 1:
56 if (vacia (ancla))
57 cout << "\n\t\tLista Vacia\n" << endl;
58 else
59 cout << "\n\t\tLista No Vacia\n" << endl;
60 system("pause");
61 system("cls");
62 break;
63 case 2:
64 registro = solicitar_elemento();
65 insertar_i (ancla,final, registro);
66 system("pause");
67 system("cls");
68 break;
69 case 3:
70 if(vacia(ancla))
71 {
72 cout << "\nLista vacia, no se puede ingresar por posicion\n" << 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<<"\n\tPosicion invalida, ingrese una posicion correcta.\n";
83 }
84 }while(posicion>=tam+1|| posicion<0);
85 registro = solicitar_elemento();
86 insertar_p(ancla,final,registro,posicion);
87 system("pause");
88 system("cls");
89 break;
90 case 4:
91 if(vacia(ancla))
92 {
93 cout << "\nLista Vacia, no se puede eliminar por posicion\n" << 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<<"\n\tPosicion invalida, ingrese una posicion correcta.\n";
104 }
105 }while(posicion>=tam|| posicion<0);
106 eliminar(ancla,final,posicion);
107 system("pause");
108 system("cls");
109 break;
110 case 5:
111 anula(ancla);
112 final = NULL;
113 system("pause");
114 system("cls");
115 break;
116 case 6:
117 imprimir (ancla);
118 system("pause");
119 system("cls");
120 break;
121 default:
122 cout << "\n\t\tOpcion Incorrecta!!!\n" << endl;
123 break;
124 }
125 }while (opcion != 0);
126 return 0;
127 }
128 void inicializa (struct Nodo *&l,struct Nodo *&f)
129 {
130 l = NULL;
131 f = NULL;
132 }
133 bool vacia (struct Nodo *l)
134 {
135 return l == NULL;
136 }
137 void insertar_i (struct Nodo *&l,struct Nodo *&f, P d)
138 {
139 struct Nodo *aux = NULL;
140 aux = new struct Nodo;
141 if (aux != NULL)
142 {
143 aux->dato = d;
144 aux->siguiente = l;
145 if(vacia(l))
146 {
147 f = aux;
148 }
149 l = aux;
150 }
151 else
152 {
153 }
154 }
155 void imprimir (struct Nodo *l)
156 {
157 cout << "\n\tinicio\n\t| ";
158 cout << "\n\tv";
159 while (l != NULL)
160 {
161 cout <<"\n Codigo:"<<l->dato.codigo<<"\n Nombre:"<<l->dato.nombre<<"\n Edad:"<<l-
>dato.edad<<"\n Direccion:"<<l->dato.direccion;
162 if(l->siguiente == NULL)
163 {
164 cout << "\t<-final";
165 }
166 cout <<"\n\t|";
167 cout <<"\n\tv";
168 l = l->siguiente;
169 }
170 cout << "\n\tnullptr" << endl << endl;
171 }
172 void anula (struct Nodo *&l)
173 {
174 if (vacia (l))
175 {
176 }
177 else
178 {
179 anula (l->siguiente);
180 delete l;
181 l = NULL;
182 }
183 }
184 P solicitar_elemento()
185 {
186 P registro;
187 cout<<"\nINGRESA NUEVA PERSONA:\n";
188 cout << "\nIngresa Codigo: ";
189 cin >> registro.codigo;
190 cin.ignore();
191 cout << "\nIngresa Nombre: ";
192 cin >> registro.nombre;
193 cout << "\nIngresa Edad: ";
194 cin >> registro.edad;
195 cin.ignore();
196 cout << "\nIngresa Direccion: ";
197 cin >> registro.direccion;
198 return registro;
199 }
200 int contar_elementos(struct Nodo *l)
201 {
202 int n=0;
203 while (l != NULL)
204 {
205 n++;
206 l = l->siguiente;
207 }
208 return n;
209 }
210 void insertar_p(struct Nodo *&l,struct Nodo *&f, P d, int posicion)
211 {
212 int n = 0,t;
213 struct Nodo *aux = NULL;
214 aux = new struct Nodo;
215 struct Nodo *aux2 = NULL;
216 aux2 = new struct Nodo;
217 struct Nodo *nuevo = NULL;
218 nuevo = new struct Nodo;
219 aux = l;
220 t = contar_elementos(l);
221 if(posicion == 0)
222 {
223 cout<<"\nPrimero"<<endl;
224 insertar_i(l,f,d);
225 return;
226 }
227 else
228 {
229 cout<<"\nPOS:"<<posicion<<"TAM:"<<t<<endl;
230 for(int i=0;i<posicion;i++)
231 {
232 aux2 = aux;
233 aux = aux->siguiente;
234 }
235 }
236 if (nuevo != NULL)
237 {
238 nuevo->dato = d;
239 aux2->siguiente = nuevo;
240 nuevo->siguiente = aux;
241 if(posicion==t)
242 {
243 f = nuevo;
244 }
245 }
246 }
247 void eliminar(struct Nodo *&l,struct Nodo *&f, int posicion)
248 {
249 int n = 0,t;
250 struct Nodo *aux = NULL;
251 aux = new struct Nodo;
252 struct Nodo *aux2 = NULL;
253 aux2 = new struct Nodo;
254 aux = l;
255 t = contar_elementos(l);
256 for(int i=0;i<posicion;i++)
257 {
258 aux2 = aux;
259 aux = aux->siguiente;
260 }
261 if(posicion == t-1)
262 {
263 f = aux2;
264 }
265 aux2->siguiente = aux->siguiente;
266 delete(aux);
267 }
268 void push(struct Nodo *&l,struct Nodo *&f,P d)
269 {
270 insertar_i(l,f,d);
271 }
272 void pop(struct Nodo *&l,struct Nodo *&f)
273 {
274 struct Nodo *aux = NULL;
275 aux = new struct Nodo;
276 if (vacia (l))
277 {
278 }
279 else
280 {
281 aux = l;
282 l = l->siguiente;
283 if(l==NULL)
284 {
285 f = NULL;
286 }
287 delete aux;
288 aux = NULL;
289 }
290 }
291 P top(struct Nodo *l)
292 {
293 struct Nodo *aux = NULL;
294 aux = new struct Nodo;
295 P paux;
296 if (vacia (l))
297 {
298 cout<<"\n\tLista vacia.\n";
299 paux.codigo = 404;
300 return paux;
301 }
302 else
303 {
304 aux = l;
305 return aux->dato;
306 }
307 }
308 void queue(struct Nodo *&l,struct Nodo *&f,P d)
309 {
310 struct Nodo *aux = NULL;
311 aux = new struct Nodo;
312 aux->dato = d;
313 aux->siguiente = NULL;
314 if(f!=NULL)
315 {
316 f->siguiente = aux;
317 }
318 f = aux;
319 if(l==NULL)
320 {
321 l = aux;
322 }
323 }
324 void deque(struct Nodo *&l,struct Nodo *&f)
325 {
326 struct Nodo *aux = NULL;
327 aux = new struct Nodo;
328 if (vacia (l))
329 {
330 }
331 else
332 {
333 aux = l;
334 l = l->siguiente;
335 if(l==NULL)
336 {
337 f = NULL;
338 }
339 delete aux;
340 aux = NULL;
341 }
342 }
343 P front(struct Nodo *l,struct Nodo *f)
344 {
345 struct Nodo *aux = NULL;
346 aux = new struct Nodo;
347 P paux;
348 if (vacia (l))
349 {
350 cout<<"\n\tLista vacia.\n";
351 paux.codigo = 404;
352 return paux;
353 }
354 else
355 {
356 aux = f;
357 return aux->dato;
358 }
359 }
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