Dia 49/2019 - Estruturas de dados em JS: Pilhas

Desafio #92daysofcode que fiz no final de 2019. Nesse artigo temos o dia 49, mostrando o uso de pilhas com javascript.

Código

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class StackArray {
constructor() {
this.items = [];
}

push(element) {
this.items.push(element);
}

pop() {
return this.items.pop();
}

peek() {
return this.items[this.items.length - 1];
}

isEmpty() {
return this.items.length === 0;
}

size() {
return this.items.length;
}

clear() {
this.items = [];
}

toArray() {
return this.items;
}

toString() {
return this.items.toString();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class StackObject {
constructor() {
this.count = 0;
this.items = {};
}

push(element) {
this.items[this.count] = element;
this.count++;
}

pop() {
if (this.isEmpty()) return undefined;

this.count--;
const result = this.items[this.count];
delete this.items[this.count];
return result;
}

peek() {
if (this.isEmpty()) return undefined;
return this.items[this.count - 1];
}

isEmpty() {
return this.count === 0;
}

size() {
return this.count;
}

clear() {
this.items = {};
this.count = 0;
}

toString() {
if (this.isEmpty()) return '';

let objString = `${this.items[0]}`;
for (let i = 1; i < this.count; i++) {
objString = `${objString},${this.items[i]}`;
}
return objString;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
const items = new WeakMap();

class Stack {
constructor() {
items.set(this, []);
}

push(element) {
const temp = items.get(this);
temp.push(element);
}

pop() {
const temp = items.get(this);
temp.pop();
}

peek() {
const temp = items.get(this);
return temp[temp.length - 1];
}

isEmpty() {
const temp = items.get(this);
return temp.length === 0;
}

size() {
const temp = items.get(this);
return temp.length;
}

clear() {
const temp = items.get(this);
temp.length = 0;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
* Array
***********************************/
const stackArray = new StackArray();

console.log(stackArray.isEmpty());
// true

stackArray.push(10);
stackArray.push(11);
stackArray.push(9);

console.log(stackArray.peek());
// 9

stackArray.push(12);

console.log(stackArray.size());
// 4

console.log(stackArray.isEmpty());
// false

stackArray.pop();
stackArray.pop();

console.log(stackArray.size());
// 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
* Object
***********************************/
const stackObject = new StackObject();

console.log(Object.getOwnPropertyNames(stackObject));
// ["count", "items"]
console.log(Object.keys(stackObject));
// ["count", "items"]

stackObject.push(10);
stackObject.push(11);

console.log(stackObject.items);
// {0: 10, 1: 11}

stackObject.items[3] = 'test'; // :(

console.log(stackObject.items);
// {0: 10, 1: 11, 3: "test"}

console.log(stackObject);
// StackObject {count: 2, items: {…}}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
* Using WeakMap for Private Properties
***********************************/
const stack = new Stack();

stack.push(10);
stack.push(11);

console.log(stack.peek());
// 11

console.log(stack.size());
// 2

console.log(stack);
// Stack {}

Conclusão

A postagem original pode ser vista no meu Instagram e o código está acessível no meu Github.

Relacionados

Ao fechar este aviso ou continuar navegando no site Nerd Calistênico, você aceita o uso de cookies.

Este site usa cookies para assegurar a melhor experiência para os nossos usuários. Consulte nossa política de privacidade.

Uma nova versão está disponível. Clique aqui para atualizar.