1
+ /*
2
+ * EJERCICIO:
3
+ * Implementa los mecanismos de introducción y recuperación de elementos propios de las
4
+ * pilas (stacks - LIFO) y las colas (queue - FIFO) utilizando una estructura de array
5
+ * o lista (dependiendo de las posibilidades de tu lenguaje).
6
+ *
7
+ * DIFICULTAD EXTRA (opcional):
8
+ * - Utilizando la implementación de pila y cadenas de texto, simula el mecanismo adelante/atrás
9
+ * de un navegador web. Crea un programa en el que puedas navegar a una página o indicarle
10
+ * que te quieres desplazar adelante o atrás, mostrando en cada caso el nombre de la web.
11
+ * Las palabras "adelante", "atrás" desencadenan esta acción, el resto se interpreta como
12
+ * el nombre de una nueva web.
13
+ * - Utilizando la implementación de cola y cadenas de texto, simula el mecanismo de una
14
+ * impresora compartida que recibe documentos y los imprime cuando así se le indica.
15
+ * La palabra "imprimir" imprime un elemento de la cola, el resto de palabras se
16
+ * interpretan como nombres de documentos.
17
+ */
18
+
19
+ let myStack = [ ] ;
20
+
21
+ // stack Last In, First Out (LIFO)
22
+
23
+ myStack . push ( 1 )
24
+ myStack . push ( 2 )
25
+ myStack . push ( 3 )
26
+
27
+ console . log ( myStack ) ;
28
+ myStack . pop ( )
29
+ console . log ( myStack ) ;
30
+
31
+ // queue First In, FirstOut (FIFO)
32
+
33
+ let myQueue = [ ]
34
+
35
+ myQueue . push ( 1 )
36
+ myQueue . push ( 2 )
37
+ myQueue . push ( 3 )
38
+
39
+ console . log ( myQueue ) ;
40
+ myQueue . shift ( )
41
+ console . log ( myQueue )
42
+
43
+
44
+ /*
45
+ * Navegacion Adelante y Atras
46
+ * - Utilizando la implementación de pila y cadenas de texto, simula el mecanismo adelante/atrás
47
+ * de un navegador web. Crea un programa en el que puedas navegar a una página o indicarle
48
+ * que te quieres desplazar adelante o atrás, mostrando en cada caso el nombre de la web.
49
+ * Las palabras "adelante", "atrás" desencadenan esta acción, el resto se interpreta como
50
+ * el nombre de una nueva web.
51
+ */
52
+
53
+ const browser = {
54
+ currentWeb : '' ,
55
+ backHistory : [ ] ,
56
+ fowardHistory : [ ] ,
57
+ addHistory : function ( str ) {
58
+ if ( this . backHistory . length === 0 && this . currentWeb === '' ) {
59
+ this . currentWeb = str
60
+ return this . currentWeb
61
+ }
62
+ this . backHistory . push ( this . currentWeb )
63
+ this . currentWeb = str
64
+ return this . currentWeb
65
+ } ,
66
+ backforward : function ( ) {
67
+ // Si existe una pagina actual y si la pila aun tiene un elemento que no sea igual al actual, quiere decir que podemos volver atras
68
+ if ( this . currentWeb !== '' && this . checkHistory ( this . backHistory ) ) {
69
+ this . fowardHistory . push ( this . currentWeb ) // Quitamos de la cola la pagina actual y la guardamos en la pila fowardsHistory
70
+ this . currentWeb = this . backHistory . pop ( ) // Actualizamos la pagina actual y la retornamos
71
+ return this . currentWeb
72
+ }
73
+ return 'No hay historial'
74
+ } ,
75
+ forward : function ( ) {
76
+ // Si existe una pagina actual y si la pila aun tiene un elemento que no sea igual al actual, quiere decir que podemos ir hacia delante
77
+ if ( this . currentWeb !== '' && this . checkHistory ( this . fowardHistory ) ) {
78
+ this . backHistory . push ( this . currentWeb ) // Almacenamos la pagina actual en la pila backforward
79
+ this . currentWeb = this . fowardHistory . pop ( ) // obtenemos la nueva pagina actual de la pila foward y se quita de fowardHistory
80
+ return this . currentWeb
81
+ }
82
+ return 'No hay historial'
83
+
84
+ } ,
85
+ checkHistory : ( stack ) => stack . length === 0 ? false : true
86
+ }
87
+
88
+
89
+ const readline = require ( "readline" ) ;
90
+ const read = readline . createInterface ( {
91
+ input : process . stdin ,
92
+ output : process . stdout ,
93
+ } ) ;
94
+
95
+ const menu = ( ) => {
96
+ read . question (
97
+ `browser: ` ,
98
+ ( option = ( option ) => {
99
+ switch ( option ) {
100
+ case "adelante" :
101
+ console . log ( browser . forward ( ) )
102
+ console . log ( 'Pagina actual: ' + browser . currentWeb ) ;
103
+ menu ( )
104
+ break ;
105
+ case "atras" :
106
+ console . log ( browser . backforward ( ) )
107
+ console . log ( 'Pagina actual: ' + browser . currentWeb ) ;
108
+ menu ( )
109
+ break ;
110
+ default :
111
+ browser . addHistory ( option )
112
+ console . log ( 'Pagina actual: ' + browser . currentWeb ) ;
113
+ menu ( )
114
+ break ;
115
+ }
116
+ } )
117
+ ) ;
118
+ }
119
+
120
+ //menu()
121
+
122
+ /*
123
+ * - Utilizando la implementación de cola y cadenas de texto, simula el mecanismo de una
124
+ * impresora compartida que recibe documentos y los imprime cuando así se le indica.
125
+ * La palabra "imprimir" imprime un elemento de la cola, el resto de palabras se
126
+ * interpretan como nombres de documentos.
127
+ */
128
+
129
+ const printer = {
130
+ queue : [ ] ,
131
+ addDocument : function ( str ) { this . queue . push ( str ) } ,
132
+ printDocument : function ( ) { return this . queue . length === 0 ? 'No hay documentos en cola' : this . queue . shift ( ) }
133
+ }
134
+
135
+
136
+ const menuPrinter = ( ) => {
137
+ read . question (
138
+ `Impresora, esperando nueva instruccion: ` ,
139
+ ( option = ( option ) => {
140
+ switch ( option ) {
141
+ case "imprimir" :
142
+ console . log ( printer . printDocument ( ) )
143
+ menuPrinter ( )
144
+ break ;
145
+ default :
146
+ printer . addDocument ( option )
147
+ console . log ( printer . queue )
148
+ menuPrinter ( )
149
+ break ;
150
+ }
151
+ } )
152
+ ) ;
153
+ }
154
+
155
+ //menuPrinter()
0 commit comments