You are on page 1of 11

UNIVERSIDAD DE LAS FUERZAS ARMAS ESPE

DEPARTAMENTO DE ELECTRICA Y ELECTRNICA

INGENIERA EN SOFTWARE

ESTRUCTURA DE DATOS

ALUMNO:
FRANCISCO TENEDA

INGENIERO:
EDGAR FABIAN MONTALUISA

Latacunga - Ecuador
2017
CDIGO FUENTE
1. #include <stdio.h>
2. #include <stdlib.h>
3. #include <iostream>
4. #include <unistd.h>
5. using namespace std;
6.
7. //COLA
8. typedef struct nodo
9. {
10. int dato;
11. int seg;
12. struct nodo *siguiente;
13. } NODO;
14.
15. NODO *CrearNodo(int dato, int seg);
16. int InsertarFinal(NODO **cabeza, int dato, int seg);
17. int EliminarNodo(NODO **cabeza);
18. int ImprimirLista(NODO *cabeza);
19. const int NUM_SEG = 120;
20. const int NUM_COL = 2;
21. const int NUM_FILA = 5;
22. //-----------------------
23.
24. //MATRIZ
25. struct COLUMNA
26. {
27. int dato;
28. struct COLUMNA *sig_col;
29. };
30.
31. struct FILA
32. {
33. struct FILA *sig_fila;
34. struct COLUMNA *columna;
35. };
36.
37. struct MATRIZ
38. {
39. int numfila, numcol;
40. struct FILA *fila;
41. };
42. //Declaracin de funciones
43. MATRIZ *crear();
44. void imprimir(MATRIZ *matriz);
45. //--------------------------
46.
47. int main()
48. {
49. NODO *cabeza = NULL, *actual = NULL;
50. MATRIZ *base = NULL;
51. int cont = 1, seg = 0, aux = 0, primero = 0, atendido = 0, atendiendo =0;
52. base = crear();
53. //variables para el manejo de filas y columnas
54. FILA *fila = NULL;
55. COLUMNA *col = NULL;
56.
57. while(aux<NUM_SEG){
58. //Crear la Cola cada 5 segundos nuevo numero
59. //ImpresionCola
60.
61. if(aux%5==0){
62. seg = 1+rand()%(10-1);
63. if(cabeza == NULL)
64. {
65. cabeza = CrearNodo(cont, seg);
66. }else
67. InsertarFinal(&cabeza, cont, seg);
68.
69. //agregar a la matriz los datos
70. fila = base->fila;
71. while(fila != NULL)
72. {
73. col = fila->columna;
74. if(col->dato==0)
75. {
76. col->dato=cont;
77. atendiendo = col->dato;
78. col->sig_col->dato=seg;
79. if(cabeza->siguiente!=NULL)
80. {
81. actual=cabeza;
82. cabeza=cabeza->siguiente;
83. free(actual);
84. }
85. break;
86. }
87. fila=fila->sig_fila;
88. }
89. cont++;
90. }
91.
92. if(ImprimirLista(cabeza)>1)
93. {
94. fila = base->fila;
95. while(fila != NULL)
96. {
97. col = fila->columna;
98. if(col->dato==0)
99. {
100. col->dato=atendiendo+1;
101. atendiendo=col->dato;
102. cont=atendiendo+1;
103. col->sig_col->dato=seg;
104. if(cabeza->siguiente!=NULL)
105. {
106. actual=cabeza;
107. cabeza=cabeza->siguiente;
108. free(actual);
109. }
110. break;
111. }
112. fila=fila->sig_fila;
113. }
114. }
115. //Manejar las filas y columnas del banco
116. fila = base->fila;
117. while(fila != NULL)
118. {
119. col = fila->columna;
120. if(col->dato!=0)
121. {
122. if(col->sig_col->dato!=1)
123. col->sig_col->dato=col->sig_col->dato-1;
124. else{
125. atendido = col->dato;
126. col->sig_col->dato=0;
127. col->dato=0;
128. }
129. }
130. fila=fila->sig_fila;
131. }
132.
133. //Imprimir datos de la cola
134. cout<<"\nNumero de clientes en la cola: "<< ImprimirLista(cabeza)-1<<"\n";
135.
136. cout<<"Siguiente cliente en ser atendido: N: " << atendiendo+1<<"\n";
137.
138. cout<<"Ultimo cliente en ser atendido: N: "<<atendido<<"\n";
139. //primero=cabeza->dato;
140.
141. //---------------------------
142. imprimir(base);
143.
144. aux++;
145. sleep(1);
146. //system("pause");
147. }
148.
149. }
150.
151. NODO *CrearNodo(int dato, int seg)
152. {
153. NODO* nuevo = NULL;
154.
155. nuevo = (NODO*)malloc(sizeof(NODO));
156. nuevo->dato = dato;
157. nuevo->seg = seg;
158. nuevo->siguiente = NULL;
159.
160. return nuevo;
161. }
162.
163. int InsertarFinal(NODO **cabeza, int dato, int seg)
164. {
165. NODO *nuevo = NULL, *nAux = *cabeza;
166.
167. nuevo = CrearNodo(dato, seg);
168. while(nAux->siguiente != NULL){nAux = nAux->siguiente;}
169. nAux->siguiente = nuevo;
170.
171. return 0;
172. }
173.
174. int EliminarNodo(NODO **cabeza)
175. {
176. NODO *actual = *cabeza, *sig = NULL;
177.
178. *cabeza = actual->siguiente;
179. free(actual);
180. }
181.
182. int ImprimirLista(NODO *cabeza)
183. {
184.
185. NODO *nAux = cabeza;
186. int contador=0;
187. if(nAux==NULL)
188. return 0;
189. while(nAux!=NULL)
190. {
191. //cout<<nAux->dato<< "\n";
192. contador++;
193. nAux=nAux->siguiente;
194. }
195.
196. return contador;
197. }
198.
199. void imprimir(MATRIZ *matriz)
200. {
201. FILA *fila = NULL;
202. COLUMNA *col = NULL;
203. fila = matriz->fila;
204. int cont = 1;
205. while(fila != NULL)
206. {
207.
208. cout<<"\nCAJA "<<cont<<"\n";
209. col = fila->columna;
210. cout<<"Cliente Atendiendo: N: "<<col->dato<<"\n";
211. cout<<"Tiempo Restante: "<<col->sig_col->dato<<" seg\n";
212. cont++;
213. fila=fila->sig_fila;
214.
215. }
216.
217. }
218.
219. MATRIZ *crear()
220. {
221. MATRIZ *matris = NULL; FILA *fila = NULL, *auxfila = NULL; COLUMNA *col = NULL, *auxcol
= NULL;
222.
223. matris = (MATRIZ*)malloc(sizeof(MATRIZ));
224. for(int i=0; i < NUM_FILA; i++)
225. {
226. fila = (FILA*)malloc(sizeof(FILA));
227. if(i==0)
228. {
229. auxfila = fila;
230. matris->fila = fila;
231. }else{
232. auxfila->sig_fila = fila;
233. auxfila = fila;
234. }
235. for(int j = 0; j < NUM_COL; j++)
236. {
237. col = (COLUMNA*)malloc(sizeof(COLUMNA));
238. col->dato=NULL;
239. col->sig_col = NULL;
240. if(j == 0)
241. {
242. fila->columna = col;
243.
244. }else{
245. auxcol->sig_col = col;
246. }
247. auxcol = col;
248.
249. }
250. fila->sig_fila = NULL;
251. }
252.
253. return matris;
254. }
CAPTURAS

captura 1 Ingreso primer cliente

captura 2 Disminucin del tiempo


captura 3 Disminucin del tiempo

captura 4 Ingreso segundo cliente


captura 5 Dos clientes en ventanilla

You might also like