Loiane Groner. Novatec
Loiane Groner. Novatec
Novatec
Copyright © Packt Publishing 2016. First published in the English language under the title ‘Learning
JavaScript Data Structures and Algorithms - Second Edition – (9781785285493)’
Copyright © Packt Publishing 2016. Publicação original em inglês intitulada ‘Learning JavaScript
Data Structures and Algorithms - Second Edition – (9781785285493)’. Esta tradução é publicada e
vendida com a permissão da Packt Publishing.
Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução
desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e
da Editora.
ISBN: 978-85-7522-553-0
Histórico de impressões:
Março/2017 Primeira edição
Agradecimentos................................................................................................. 13
Sobre a autora................................................................................................... 14
Sobre a revisora................................................................................................. 15
Prefácio............................................................................................................. 16
1 JavaScript – uma rápida visão geral............................................................... 21
Estrutura de dados e algoritmos em JavaScript......................................................... 22
Configuração do ambiente....................................................................................... 22
Configuração mínima para trabalhar com JavaScript............................................... 23
Usando servidores web (XAMPP).............................................................................24
Tudo a ver com JavaScript (Node.js)........................................................................ 25
Básico sobre o JavaScript..........................................................................................27
Variáveis................................................................................................................. 28
Escopo das variáveis...........................................................................................30
Operadores..............................................................................................................31
Truthy e falsy...........................................................................................................34
Funções dos operadores de igualdade (== e ===)......................................................35
Estruturas de controle..............................................................................................37
Instruções condicionais.......................................................................................37
Laços.......................................................................................................................39
Funções.................................................................................................................. 40
Programação orientada a objetos em JavaScript.........................................................41
Depuração e ferramentas..........................................................................................43
Introdução à ECMAScript....................................................................................... 44
ECMAScript 6 e ECMAScript 7......................................................................... 44
Tabela de compatibilidade...................................................................................45
Usando o Babel.js............................................................................................... 46
5
6 Estruturas de dados e algoritmos em JavaScript
2 Arrays........................................................................................................... 60
Por que devemos usar arrays?.................................................................................. 60
Criando e inicializando arrays..................................................................................61
Acessando elementos e iterando em um array............................................................62
Acrescentando elementos.........................................................................................63
Usando o método push............................................................................................63
Inserindo um elemento na primeira posição............................................................. 64
Usando o método unshift........................................................................................ 64
Removendo elementos..............................................................................................65
Removendo um elemento da primeira posição...........................................................65
Usando o método shift............................................................................................ 66
Acrescentando e removendo elementos de uma posição específica............................ 66
Arrays bidimensionais e multidimensionais...............................................................67
Iterando pelos elementos de arrays bidimensionais....................................................69
Arrays multidimensionais.........................................................................................69
Referências para métodos de array em JavaScript......................................................70
Juntando vários arrays.............................................................................................71
Funções de iteração..................................................................................................72
Iterando com o método every...................................................................................72
Iterando com o método some...................................................................................72
Iterando com forEach...............................................................................................73
Usando map e filter..................................................................................................73
Usando o método reduce..........................................................................................73
ECMAScript 6 e novas funcionalidades de Array......................................................74
Sumário 7
3 Pilhas............................................................................................................ 87
Estrutura de dados pilha..........................................................................................87
Criando uma pilha.................................................................................................. 88
Empilhando elementos na pilha................................................................................89
Desempilhando elementos da pilha...........................................................................89
Dando uma espiada no elemento que está no topo da pilha...................................... 90
Verificando se a pilha está vazia............................................................................... 90
Limpando e exibindo os elementos da pilha..............................................................91
Usando a classe Stack...............................................................................................91
EcmaScript 6 e a classe Stack....................................................................................93
Declarando a classe Stack usando a sintaxe da ES6...................................................93
Classes ES6 com Symbols no escopo....................................................................... 94
Classes ES6 com WeakMap.....................................................................................95
Resolvendo problemas usando pilhas........................................................................97
Decimal para binário...............................................................................................98
Algoritmo conversor de base.................................................................................... 99
Resumo.................................................................................................................100
4 Filas.............................................................................................................101
Estrutura de dados fila...........................................................................................101
Criando uma fila....................................................................................................102
Inserção de elementos na fila.............................................................................103
8 Estruturas de dados e algoritmos em JavaScript
5 Listas ligadas...............................................................................................113
Estrutura de dados da lista ligada...........................................................................113
Criando uma lista ligada........................................................................................115
Concatenando elementos no final da lista ligada................................................ 116
Removendo elementos da lista ligada................................................................. 118
Inserindo um elemento em qualquer posição.....................................................121
Implementando os demais métodos...................................................................124
Método toString..........................................................................................124
Método indexOf..........................................................................................124
Métodos isEmpty, size e getHead..................................................................126
Listas duplamente ligadas.......................................................................................126
Inserindo um novo elemento em qualquer posição.............................................127
Removendo elementos de qualquer posição........................................................130
Listas ligadas circulares..........................................................................................133
Resumo.................................................................................................................134
6 Conjuntos.....................................................................................................135
Estruturando um conjunto de dados.......................................................................135
Criando um conjunto.............................................................................................136
Método has (value)............................................................................................137
Método add......................................................................................................137
Métodos delete e clear.......................................................................................138
Método size......................................................................................................139
Método values..................................................................................................140
Usando a classe Set........................................................................................... 141
Operações relacionadas a conjuntos........................................................................ 141
União de conjuntos........................................................................................... 142
Intersecção de conjuntos...................................................................................143
Diferença entre conjuntos.................................................................................. 145
Sumário 9
Subconjunto.....................................................................................................146
ES6 – a classe Set...................................................................................................148
Operações com a classe Set da ES6....................................................................149
Simulando a operação de união....................................................................149
Simulando a operação de intersecção............................................................149
Simulando a operação de diferença...............................................................150
Resumo.................................................................................................................151
7 Dicionários e hashes.....................................................................................152
Dicionários............................................................................................................152
Criando um dicionário......................................................................................152
Métodos has e set.........................................................................................153
Método delete..............................................................................................154
Métodos get e values....................................................................................154
Métodos clear, size, keys e getItems..............................................................155
Usando a classe Dictionary...............................................................................156
Tabela hash............................................................................................................157
Criando uma tabela hash..................................................................................158
Usando a classe HashTable................................................................................160
Tabela hash versus conjunto hash...................................................................... 161
Tratando colisões nas tabelas hash.................................................................... 161
Encadeamento separado...............................................................................163
Sondagem linear..........................................................................................168
Criando funções melhores de hash...............................................................172
Classe Map da ES6................................................................................................173
Classes WeakMap e WeakSet da ES6..................................................................... 174
Resumo................................................................................................................. 175
8 Árvores........................................................................................................176
Estrutura de dados para árvores............................................................................. 176
Terminologia de árvores.........................................................................................177
A árvore binária e a árvore binária de busca............................................................178
Criando a classe BinarySearchTree....................................................................178
Inserindo uma chave em uma árvore.................................................................180
Percorrendo uma árvore.........................................................................................183
Percurso em ordem...........................................................................................184
Percurso pré-ordem...........................................................................................185
Percurso pós-ordem..........................................................................................186
Pesquisando valores em uma árvore........................................................................187
Pesquisando valores mínimos e máximos..........................................................188
10 Estruturas de dados e algoritmos em JavaScript
9 Grafos......................................................................................................... 205
Terminologia dos grafos.........................................................................................205
Grafos direcionados e não direcionados.............................................................207
Representando um grafo........................................................................................208
Matriz de adjacências........................................................................................208
Lista de adjacências...........................................................................................209
Matriz de incidência..........................................................................................210
Criando a classe Graph..........................................................................................211
Percorrendo grafos.................................................................................................213
Busca em largura (BFS)..................................................................................... 214
Encontrando os caminhos mais curtos usando BFS.......................................218
Estudos adicionais sobre algoritmos de caminhos mais curtos.......................221
Busca em profundidade (DFS)...........................................................................221
Explorando o algoritmo DFS........................................................................224
Ordenação topológica usando DFS...............................................................227
Algoritmos de caminhos mais curtos......................................................................229
Algoritmo de Dijkstra........................................................................................230
Algoritmo de Floyd-Warshall.............................................................................232
Árvore de extensão mínima (MST).........................................................................234
Algoritmo de Prim............................................................................................234
Algoritmo de Kruskal........................................................................................236
Resumo.................................................................................................................238
Insertion sort....................................................................................................246
Merge sort........................................................................................................248
Quick sort........................................................................................................251
Processo de partição....................................................................................253
Quick sort em ação......................................................................................254
Heap sort..........................................................................................................258
Counting, bucket e radix sorts (as ordenações por distribuição)..........................261
Algoritmos de busca...............................................................................................262
Busca sequencial...............................................................................................262
Busca binária....................................................................................................263
Resumo.................................................................................................................265
Algoritmos de ordenação..............................................................................298
Algoritmos de busca.....................................................................................299
Introdução à teoria de NP-completo..................................................................299
Problemas impossíveis e algoritmos heurísticos............................................ 300
Divertindo-se com algoritmos.................................................................................301
Resumo.................................................................................................................302