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
+
20
+ // Stack - LIFO
21
+
22
+ const stack : number [ ] = [ ]
23
+
24
+ // Add item
25
+ stack . push ( 1 )
26
+ stack . push ( 2 )
27
+ stack . push ( 3 )
28
+ stack . push ( 4 )
29
+ console . log ( stack ) // [1, 2, 3, 4]
30
+
31
+ // Remove item -> last item
32
+ stack . pop ( )
33
+ console . log ( stack ) // [1, 2, 3]
34
+ stack . pop ( )
35
+ console . log ( stack ) // [1, 2]
36
+
37
+
38
+ // Queue - FIFO
39
+
40
+ let queue : number [ ] = [ ]
41
+
42
+ // Add item
43
+ queue . push ( 1 )
44
+ queue . push ( 2 )
45
+ queue . push ( 3 )
46
+ queue . push ( 4 )
47
+ console . log ( queue ) // [1, 2, 3, 4]
48
+
49
+ // Remove item -> from the beginning
50
+ // Using splice():
51
+ queue . splice ( 0 , 1 )
52
+ console . log ( queue ) // [2, 3, 4]
53
+ // Using slice():
54
+ queue = queue . slice ( 1 )
55
+ console . log ( queue ) // [3, 4]
56
+ // Using shift()
57
+ queue . shift ( )
58
+ console . log ( queue ) // [4]
59
+
60
+
61
+ /*
62
+ * DIFICULTAD EXTRA (opcional):
63
+ * - Utilizando la implementación de pila y cadenas de texto, simula el mecanismo adelante/atrás
64
+ * de un navegador web. Crea un programa en el que puedas navegar a una página o indicarle
65
+ * que te quieres desplazar adelante o atrás, mostrando en cada caso el nombre de la web.
66
+ * Las palabras "adelante", "atrás" desencadenan esta acción, el resto se interpreta como
67
+ * el nombre de una nueva web.
68
+ */
69
+
70
+
71
+ import * as readline from 'readline'
72
+ const rl = readline . createInterface ( {
73
+ input : process . stdin ,
74
+ output : process . stdout
75
+ } )
76
+
77
+
78
+ const history : string [ ] = [ ]
79
+ let pointer : number = - 1
80
+
81
+ function webNavigation ( ) : void {
82
+ const showMenu = ( ) : void => {
83
+ console . log ( '\nType one of the following:' ) ;
84
+ console . log ( ' - The web page you want to visit' ) ;
85
+ console . log ( ' - Back (to go to the previous page)' ) ;
86
+ console . log ( ' - Next (to go to the next page)' ) ;
87
+ console . log ( ' - Exit' ) ;
88
+ }
89
+
90
+ showMenu ( )
91
+
92
+ rl . question ( 'Where do you want to go?\n> ' , ( action : string ) => {
93
+ if ( action && action . trim ( ) . toLowerCase ( ) === 'exit' ) {
94
+ rl . close ( )
95
+ return
96
+ } else if ( action && action . trim ( ) . toLowerCase ( ) === 'next' ) {
97
+ if ( pointer !== history . length - 1 ) {
98
+ pointer ++
99
+ }
100
+ console . log ( `\nYou are in: ${ history [ pointer ] } ` ) ;
101
+ } else if ( action && action . trim ( ) . toLowerCase ( ) === 'back' ) {
102
+ pointer --
103
+ if ( pointer < 0 ) {
104
+ pointer = - 1
105
+ console . log ( '\nYou are in home page' )
106
+ } else {
107
+ console . log ( `\nYou are in: ${ history [ pointer ] } ` )
108
+ }
109
+ } else if ( action ) {
110
+ history . push ( action )
111
+ pointer = history . length - 1
112
+ console . log ( `\nYou are in: ${ history [ pointer ] } ` )
113
+ }
114
+
115
+ webNavigation ( )
116
+ } )
117
+ }
118
+
119
+ webNavigation ( )
120
+
121
+
122
+ /*
123
+ * DIFICULTAD EXTRA (opcional):
124
+ * - Utilizando la implementación de cola y cadenas de texto, simula el mecanismo de una
125
+ * impresora compartida que recibe documentos y los imprime cuando así se le indica.
126
+ * La palabra "imprimir" imprime un elemento de la cola, el resto de palabras se
127
+ * interpretan como nombres de documentos.
128
+ */
129
+
130
+
131
+ const printerQueue : string [ ] = [ ]
132
+
133
+ function printer ( ) {
134
+ const showMenu = ( ) => {
135
+ console . log ( '\nPrinter options:' ) ;
136
+ console . log ( ' - Type a document name to add it to the queue' ) ;
137
+ console . log ( ' - Type "print" to print the first item' ) ;
138
+ console . log ( ' - Exit' ) ;
139
+ }
140
+
141
+ const showQueue = ( ) => {
142
+ console . log ( '\nPrinter Queue:' )
143
+
144
+ if ( printerQueue . length > 0 ) {
145
+ for ( let doc of printerQueue ) {
146
+ console . log ( ` - ${ doc } ` )
147
+ }
148
+ } else {
149
+ console . log ( 'The Queue is empty.' )
150
+ }
151
+ }
152
+
153
+ showMenu ( ) ;
154
+ rl . question ( 'Type a document name or "print" to print the first item:\n> ' , ( action : string ) => {
155
+ if ( action && action . trim ( ) . toLowerCase ( ) === 'exit' ) {
156
+ rl . close ( )
157
+ return
158
+ } else if ( action && action . trim ( ) . toLowerCase ( ) === 'print' ) {
159
+ if ( printerQueue . length > 0 ) {
160
+ let printingDoc = printerQueue . shift ( )
161
+ console . log ( `Printing: ${ printingDoc } ` )
162
+ } else {
163
+ console . log ( 'There are no documents to print.' )
164
+ }
165
+ } else if ( action ) {
166
+ printerQueue . push ( action )
167
+ }
168
+
169
+ showQueue ( )
170
+ printer ( )
171
+ } )
172
+ }
173
+
174
+ printer ( )
0 commit comments