This repository has been archived by the owner on Nov 23, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchallenge3.js
105 lines (91 loc) · 3.14 KB
/
challenge3.js
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// Definir a estrutura de um nó da lista
class node {
constructor(produto) {
this.produto = produto // Objeto contendo as informações do produto
this.next = null // Referência para o próximo nó
this.previous = null // Referência para o nó anterior
}
}
// Definir a classe da lista duplamente encadeada
class ListaDuplamenteEncadeada {
constructor() {
this.head = null // Referência para o primeiro nó da lista
this.tail = null // Referência para o último nó da lista
}
// Adicionar um produto à lista
adicionarProduto(produto) {
const newNode = new node(produto) // Cria um novo nó com o produto
// Caso a lista esteja vazia
if (this.head === null) {
this.head = newNode
this.tail = newNode
} else {
newNode.previous = this.tail // Define o nó anterior do novo nó como o nó atual da calda
this.tail.next = newNode // Define o próximo nó do nó atual da calda como o novo nó
this.tail = newNode // Define o novo nó como o novo nó da calda
}
}
// Remover um produto da lista
removerProduto(códigoDeBarras) {
let currentNode = this.head
while (currentNode) {
if (currentNode.produto.códigoDeBarras === códigoDeBarras) {
if (currentNode === this.head) this.head = currentNode.next
if (currentNode === this.tail) this.tail = currentNode.previous
if (currentNode.previous) currentNode.previous.next = currentNode.next
if (currentNode.next) currentNode.next.previous = currentNode.previous
break
}
currentNode = currentNode.next
}
}
// Atualizar a quantidade em estoque de um produto
atualizarEstoque(códigoDeBarras, novaQuantidade) {
let currentNode = this.head;
while (currentNode) {
if (currentNode.produto.códigoDeBarras === códigoDeBarras) {
currentNode.produto.quantidade = novaQuantidade
break
}
currentNode = currentNode.next
}
}
// Listar todos os produtos da lista
listarProdutos() {
let currentNode = this.head
while (currentNode) {
const { nome, códigoDeBarras, preço, quantidade } = currentNode.produto
console.log(`Nome: ${nome}, Código de Barras: ${códigoDeBarras}, Preço: ${preço}, Quantidade: ${quantidade}`)
currentNode = currentNode.next
}
}
}
const lista = new ListaDuplamenteEncadeada()
const produto1 = {
nome: 'Produto 1',
códigoDeBarras: '123456789',
preço: 10.99,
quantidade: 5
}
const produto2 = {
nome: 'Produto 2',
códigoDeBarras: '987654321',
preço: 19.99,
quantidade: 3
}
const produto3 = {
nome: `Produto 3`,
códigoDeBarras: `135791113`,
preço: `25,50`,
quantidade: `2`
}
// Adicionar produtos à lista
lista.adicionarProduto(produto1)
lista.adicionarProduto(produto2)
lista.adicionarProduto(produto3)
// Atualizar a quantidade em estoque de um produto
lista.atualizarEstoque('123456789', 2)
// Remover um produto da lista
// lista.removerProduto('987654321')
// Listar os produtos
lista.listarProdutos()