1+ var readline = require ( 'readline' )
2+
3+ var rl = readline . createInterface ( {
4+ input : process . stdin ,
5+ output : process . stdout
6+ } )
7+ /*
8+ * EJERCICIO:
9+ * Implementa los mecanismos de introducción y recuperación de elementos propios de las
10+ * pilas (stacks - LIFO) y las colas (queue - FIFO) utilizando una estructura de array
11+ * o lista (dependiendo de las posibilidades de tu lenguaje).
12+ */
13+
14+ //Pilas LIFO
15+ class Lifo {
16+ list : ( number | string ) [ ] = [ ]
17+ adding ( data : number | string ) : void {
18+ this . list . push ( data )
19+ }
20+ removing ( ) : void {
21+ this . list . pop ( )
22+ }
23+ }
24+
25+ const myLifo : Lifo = new Lifo
26+ myLifo . adding ( 1 )
27+ myLifo . adding ( 2 )
28+ myLifo . adding ( 3 )
29+ myLifo . removing ( )
30+ console . log ( myLifo )
31+
32+ // Colas FIFO
33+
34+ class Fifo {
35+ list : ( number | string ) [ ] = [ ]
36+ adding ( data : number | string ) : void {
37+ this . list . push ( data )
38+ }
39+ removing ( ) : void {
40+ this . list . shift ( )
41+ }
42+ }
43+
44+ const myFifo : Fifo = new Fifo
45+ myFifo . adding ( 1 )
46+ myFifo . adding ( 2 )
47+ myFifo . adding ( 3 )
48+ myFifo . removing ( )
49+ console . log ( myFifo )
50+
51+ /*
52+ * DIFICULTAD EXTRA (opcional):
53+ * - Utilizando la implementación de pila y cadenas de texto, simula el mecanismo adelante/atrás
54+ * de un navegador web. Crea un programa en el que puedas navegar a una página o indicarle
55+ * que te quieres desplazar adelante o atrás, mostrando en cada caso el nombre de la web.
56+ * Las palabras "adelante", "atrás" desencadenan esta acción, el resto se interpreta como
57+ * el nombre de una nueva web.
58+ * - Utilizando la implementación de cola y cadenas de texto, simula el mecanismo de una
59+ * impresora compartida que recibe documentos y los imprime cuando así se le indica.
60+ * La palabra "imprimir" imprime un elemento de la cola, el resto de palabras se
61+ * interpretan como nombres de documentos.
62+ */
63+
64+ function webNavigator ( ) : void {
65+ const list : Array < string > = [ ]
66+ rl . question ( 'Ingresa el nombre de una web, "adelante", "atrás" o "salir": ' , ( response : string ) => {
67+ if ( response === 'atrás' && list . length > 0 ) {
68+ list . pop ( )
69+ } else if ( response !== 'adelante' && response !== 'salir' && response !== 'atrás' ) {
70+ list . push ( response )
71+ }
72+ if ( response === 'salir' ) {
73+ rl . close ( )
74+ } else {
75+ console . log ( `Página actual: ${ list [ list . length - 1 ] || "Inicio" } ` )
76+ webNavigator ( )
77+ }
78+ } )
79+ }
80+ webNavigator ( )
81+
82+ const printerList : Array < string > = [ ]
83+ function printer ( ) : void {
84+ console . log ( 'list' , printerList )
85+ rl . question ( 'Ingresa imprimir o un nombre de documento: ' , ( response : string ) => {
86+ if ( response === 'imprimir' ) {
87+ console . log ( printerList [ 0 ] )
88+ printerList . shift ( )
89+ printer ( )
90+ } else if ( response !== 'imprimir' ) {
91+ printerList . push ( response )
92+ printer ( )
93+ } else {
94+ console . log ( 'opcion incorrecta' )
95+ rl . close ( )
96+ }
97+ } )
98+ }
99+
100+ printer ( )
0 commit comments