Skip to content

Commit 534ed8c

Browse files
#7 - javascript
1 parent d5046da commit 534ed8c

File tree

1 file changed

+184
-0
lines changed

1 file changed

+184
-0
lines changed
Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
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+
console.log('---------------------PILA---------------------');
20+
21+
class Stack {
22+
23+
constructor (arr) {
24+
this.stack = arr;
25+
}
26+
27+
push (item) {
28+
this.stack.push(item);
29+
}
30+
31+
pop () {
32+
this.stack.pop();
33+
}
34+
35+
peek () {
36+
return this.stack[this.stack.length - 1];
37+
}
38+
39+
size () {
40+
return this.stack.length;
41+
}
42+
}
43+
44+
const pila = new Stack([10, 20, 30]);
45+
46+
pila.push(40);
47+
pila.push(50);
48+
pila.pop();
49+
50+
console.log(pila.peek());
51+
console.log(pila.size());
52+
53+
54+
console.log('---------------------COLA---------------------');
55+
56+
class Queue {
57+
58+
constructor (arr) {
59+
this.queue = arr;
60+
}
61+
62+
enqueue (item) {
63+
this.queue.push(item);
64+
}
65+
66+
dequeue () {
67+
if (this.isEmpty()) {
68+
return null;
69+
} else {
70+
return this.queue.shift();
71+
}
72+
}
73+
74+
isEmpty() {
75+
return this.queue.length === 0;
76+
}
77+
78+
size () {
79+
return this.queue.length;
80+
}
81+
82+
front () {
83+
if (this.isEmpty()) {
84+
return null;
85+
} else {
86+
return this.queue[0];
87+
}
88+
}
89+
}
90+
91+
const cola = new Queue([11, 22, 33]);
92+
console.log(cola);
93+
cola.dequeue();
94+
cola.enqueue(1);
95+
console.log(cola.front());
96+
97+
console.log('-------------- NAVEGADOR WEB --------------');
98+
99+
const readline = require('readline');
100+
const rl = readline.createInterface(process.stdin, process.stdout);
101+
102+
let historial = new Stack([]);
103+
let forwardStack = new Stack([]);
104+
105+
const navegador = () => {
106+
107+
rl.question('Adelante, atrás, o introduce una web -> ', (term) => {
108+
switch(term) {
109+
case 'adelante':
110+
goForward();
111+
break;
112+
case 'atras':
113+
goBack();
114+
break;
115+
default:
116+
navigate(term);
117+
}
118+
});
119+
120+
}
121+
122+
const navigate = (term) => {
123+
historial.push(term);
124+
console.log('Going to -> ', term);
125+
forwardStack = new Stack([]);
126+
entryPoint();
127+
}
128+
129+
const goBack = () => {
130+
forwardStack.push(historial.peek())
131+
historial.pop();
132+
console.log('Going back to -> ', historial.peek());
133+
entryPoint();
134+
}
135+
136+
const goForward = () => {
137+
console.log('Going forward to ->', forwardStack.peek());
138+
historial.push(forwardStack.peek());
139+
entryPoint();
140+
}
141+
142+
// * DIFICULTAD EXTRA (opcional):
143+
// * - Utilizando la implementación de cola y cadenas de texto, simula el mecanismo de una
144+
// * impresora compartida que recibe documentos y los imprime cuando así se le indica.
145+
// * La palabra "imprimir" imprime un elemento de la cola, el resto de palabras se
146+
// * interpretan como nombres de documentos.
147+
148+
console.log('-------------- IMPRESORA --------------');
149+
150+
let colaImpresion = new Queue([]);
151+
152+
const imprimir = () => {
153+
154+
rl.question('Imprime o añade un documento -> ', (term) => {
155+
156+
switch (term) {
157+
case 'imprimir':
158+
console.log('Imprimiendo documento: ', colaImpresion.dequeue());
159+
imprimir();
160+
break;
161+
default:
162+
console.log('Documento añadido: ', term);
163+
colaImpresion.enqueue(term);
164+
imprimir();
165+
break;
166+
}
167+
})
168+
}
169+
170+
const entryPoint = () => {
171+
172+
rl.question('¿Qué programa desea ejecutar? -> ', (term) => {
173+
switch (term) {
174+
case 'Navegador':
175+
navegador();
176+
break;
177+
case 'Impresora':
178+
imprimir();
179+
break;
180+
}
181+
})
182+
}
183+
184+
entryPoint();

0 commit comments

Comments
 (0)