1+ ## Pilas Y Colas
2+
3+ # pilas (stacks - LIFO)
4+
5+ my_stack = [] #creo una lista
6+
7+ #push
8+ my_stack .append (1 ) #apilo, el primer elemento
9+ my_stack .append (2 ) #apilo, el segundo elemento
10+ my_stack .append (3 ) #apilo, el tercer elemento
11+
12+ print (my_stack )
13+
14+ #pop
15+ my_stack_item = my_stack [len (my_stack )- 1 ] #recupero el ultimo elemento en mi lista(my_stack)
16+ #del my_stack[len(my_stack)-1] # borra el último elemento de mi lista
17+ del my_stack [- 1 ] #tambien se puede eliminar el elemento a travez de su indice
18+
19+ print (my_stack_item )
20+ print (my_stack )
21+
22+ #desapilando un elemento a travez del método ".pop()"
23+ my_pop_item = my_stack .pop ()
24+
25+ print (my_pop_item )
26+ print (my_stack )
27+
28+
29+ # Colas (Queues - FIFO)
30+ my_queue = []
31+
32+ #enqueue
33+ my_queue .append (1 )
34+ my_queue .append (2 )
35+ my_queue .append (3 )
36+
37+ print (my_queue )
38+
39+ #dequeue
40+
41+ print (my_queue .pop (0 )) # indicar el indice "0", que es el mas viejo de la lista.
42+ del my_queue [0 ] #tambien lo podemos hacer como en el caso de pila pero esta vez asignanos el indice "0"
43+
44+ """
45+ Extra
46+ """
47+
48+ def web_navigator ():
49+
50+ stack_web = []
51+ stack_foward = []
52+
53+ while True :
54+ action = input ("Añade una ruta, o selecciona atras, adelante o salir: \n " )
55+
56+ if action == "salir" :
57+ print ("Saliendo de la aplicación" )
58+ break
59+ elif action == "adelante" :
60+ if stack_foward : # equiva a -> len(stack_foward)>0
61+ siguiente_pagina = stack_foward .pop ()# recupera la pagina hacia adelante
62+ stack_web .append (siguiente_pagina ) # la añade al historial
63+
64+ else :
65+ print ("No hay paginas para avanzar." )
66+
67+ elif action == "atras" :
68+ if stack_web : # equivale a -> len(stack_web)> 0:
69+ ultima_pagina = stack_web .pop () #retira la pagina actual y la asigna a stack_foward
70+ stack_foward .append (ultima_pagina )
71+ if stack_web :
72+ print (f"te envuentras en el sitio: { stack_web [- 1 ]} \n " )
73+ else :
74+ print ("Te encuentras en la pagina principal. el historial de navegacion se encuentra vacio." )
75+
76+ else :
77+ print ("Te encuentras en la pagina principal. el historial de navegacion se encuentra vacio." )
78+
79+ else :
80+ stack_web .append (action )
81+ stack_foward .clear ()
82+
83+ print (f"Historial de navegación: { stack_web } " )
84+ print (f"pagina hacia adelante: { stack_foward } \n " )
85+
86+ web_navigator ()
87+
88+
89+ """
90+ Nota: se implementó un pila temporal, para recuperar el valor alojado en ".pop" y tener la opción de hacer
91+ un paso "adelante". cuando el usuario ingresa una nueva url la pila temporal se reinicia.
92+ """
93+
94+ def shared_printer ():
95+
96+ cola_impresion = []
97+ while True :
98+ action = input ("Añade un documento a la cola, selecciona imprimir o salir: \n " )
99+
100+ if action == "salir" :
101+ break
102+ elif action == "imprimir" :
103+ if len (cola_impresion ) > 0 :
104+ print (f" Imprimiendo el documento: { cola_impresion .pop (0 )} \n " )
105+ else :
106+ print ("la cola de impresión esta vacia. no hay documentos por imprimir." )
107+ else :
108+ cola_impresion .append (action )
109+ print (f"documentos en cola de impresion:\n { cola_impresion } " )
110+ shared_printer ()
0 commit comments