├── .gitignore ├── .idea ├── Livro-JavaScript-EstruturaDadosAlgoritmoJavaScript.iml ├── misc.xml ├── modules.xml ├── php.xml └── vcs.xml ├── 01-JavaScript-UmaRapidaVisaoGeral ├── 01-helloWord.html ├── 01-helloWorld.js ├── 02-Variables.html ├── 02-Variables.js ├── 03-Operators.html ├── 03-Operators.js ├── 04-TruthyFalsy.html ├── 04-TruthyFalsy.js ├── 05-EqualsOperators.html ├── 05-EqualsOperators.js └── README.md ├── 02-Arrays └── README.md ├── 03-Pilhas └── README.md ├── 04-Filas └── README.md ├── 05-Listas-ligadas └── README.md ├── 06-Conjuntos └── README.md ├── 07-Dicionarios-e-hashes └── README.md ├── 08-Arvores └── README.md ├── 09-Grafos └── README.md ├── 10-Algoritmos-de-ordenacao-e-busca └── README.md ├── 11-Padroes-de-algoritmos └── README.md ├── 12-Complexidade-de-algoritmos └── README.md └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.gitignore.io/api/node,intellij 3 | 4 | ### Intellij ### 5 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm 6 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 7 | 8 | # User-specific stuff: 9 | .idea/**/workspace.xml 10 | .idea/**/tasks.xml 11 | .idea/dictionaries 12 | 13 | # Sensitive or high-churn files: 14 | .idea/**/dataSources/ 15 | .idea/**/dataSources.ids 16 | .idea/**/dataSources.xml 17 | .idea/**/dataSources.local.xml 18 | .idea/**/sqlDataSources.xml 19 | .idea/**/dynamic.xml 20 | .idea/**/uiDesigner.xml 21 | 22 | # Gradle: 23 | .idea/**/gradle.xml 24 | .idea/**/libraries 25 | 26 | # CMake 27 | cmake-build-debug/ 28 | 29 | # Mongo Explorer plugin: 30 | .idea/**/mongoSettings.xml 31 | 32 | ## File-based project format: 33 | *.iws 34 | 35 | ## Plugin-specific files: 36 | 37 | # IntelliJ 38 | /out/ 39 | 40 | # mpeltonen/sbt-idea plugin 41 | .idea_modules/ 42 | 43 | # JIRA plugin 44 | atlassian-ide-plugin.xml 45 | 46 | # Cursive Clojure plugin 47 | .idea/replstate.xml 48 | 49 | # Ruby plugin and RubyMine 50 | /.rakeTasks 51 | 52 | # Crashlytics plugin (for Android Studio and IntelliJ) 53 | com_crashlytics_export_strings.xml 54 | crashlytics.properties 55 | crashlytics-build.properties 56 | fabric.properties 57 | 58 | ### Intellij Patch ### 59 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 60 | 61 | # *.iml 62 | # modules.xml 63 | # .idea/misc.xml 64 | # *.ipr 65 | 66 | # Sonarlint plugin 67 | .idea/sonarlint 68 | 69 | ### Node ### 70 | # Logs 71 | logs 72 | *.log 73 | npm-debug.log* 74 | yarn-debug.log* 75 | yarn-error.log* 76 | 77 | # Runtime data 78 | pids 79 | *.pid 80 | *.seed 81 | *.pid.lock 82 | 83 | # Directory for instrumented libs generated by jscoverage/JSCover 84 | lib-cov 85 | 86 | # Coverage directory used by tools like istanbul 87 | coverage 88 | 89 | # nyc test coverage 90 | .nyc_output 91 | 92 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 93 | .grunt 94 | 95 | # Bower dependency directory (https://bower.io/) 96 | bower_components 97 | 98 | # node-waf configuration 99 | .lock-wscript 100 | 101 | # Compiled binary addons (http://nodejs.org/api/addons.html) 102 | build/Release 103 | 104 | # Dependency directories 105 | node_modules/ 106 | jspm_packages/ 107 | 108 | # Typescript v1 declaration files 109 | typings/ 110 | 111 | # Optional npm cache directory 112 | .npm 113 | 114 | # Optional eslint cache 115 | .eslintcache 116 | 117 | # Optional REPL history 118 | .node_repl_history 119 | 120 | # Output of 'npm pack' 121 | *.tgz 122 | 123 | # Yarn Integrity file 124 | .yarn-integrity 125 | 126 | # dotenv environment variables file 127 | .env 128 | 129 | 130 | # End of https://www.gitignore.io/api/node,intellij -------------------------------------------------------------------------------- /.idea/Livro-JavaScript-EstruturaDadosAlgoritmoJavaScript.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/php.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 10 | 13 | 14 | 16 | 17 | 19 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /01-JavaScript-UmaRapidaVisaoGeral/01-helloWord.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 01 6 | 7 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /01-JavaScript-UmaRapidaVisaoGeral/01-helloWorld.js: -------------------------------------------------------------------------------- 1 | function output(t) { 2 | document.write('

' + t + '

'); 3 | } 4 | 5 | alert('Hello, World!'); 6 | console.log('Hello, World!'); 7 | output('Hello, World!'); -------------------------------------------------------------------------------- /01-JavaScript-UmaRapidaVisaoGeral/02-Variables.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 02 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /01-JavaScript-UmaRapidaVisaoGeral/02-Variables.js: -------------------------------------------------------------------------------- 1 | var num = 1; // {1} 2 | num = 3; // {2} 3 | 4 | var price = 1.5; // {3} 5 | var myName = 'Packt'; // {4} 6 | var trueValue = true; // {5} 7 | var nullVar = null; // {6} 8 | var und; // {7} 9 | 10 | console.log('num: ' + num); 11 | console.log('myName: ' + myName); 12 | console.log('trueValue: ' + trueValue); 13 | console.log('price: ' + price); 14 | console.log('nullVar: ' + nullVar); 15 | console.log('und: ' + und); 16 | 17 | // ******* Variable Scope 18 | 19 | var myVariable = 'global'; 20 | myOtherVariable = 'global'; 21 | 22 | function myFunction() { 23 | var myVariable = 'local'; 24 | return myVariable; 25 | } 26 | 27 | function myOtherFunction() { 28 | myOtherVariable = 'local'; 29 | return myOtherVariable; 30 | } 31 | 32 | console.log(myVariable); //{1} 33 | console.log(myFunction()); //{2} 34 | 35 | console.log(myOtherVariable); //{3} 36 | console.log(myOtherFunction()); //{4} 37 | console.log(myOtherVariable); //{5} -------------------------------------------------------------------------------- /01-JavaScript-UmaRapidaVisaoGeral/03-Operators.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 04-TruthyFalsy 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /01-JavaScript-UmaRapidaVisaoGeral/03-Operators.js: -------------------------------------------------------------------------------- 1 | /* Arithmetic operators */ 2 | var num = 0; // {1} 3 | console.log('num value is ' + num); 4 | 5 | num = num + 2; 6 | console.log('New num value is ' + num); 7 | 8 | num = num * 3; 9 | console.log('New num value is ' + num); 10 | 11 | num = num / 2; 12 | console.log('New num value is ' + num); 13 | 14 | num++; 15 | num--; 16 | 17 | console.log('New num value is ' + num); 18 | 19 | console.log('num mod 2 value is ' + num % 2); 20 | 21 | /* Assignment operators */ 22 | num += 1; 23 | num -= 2; 24 | num *= 3; 25 | num /= 2; 26 | num %= 3; 27 | 28 | console.log('New num value is ' + num); 29 | 30 | /* Assignment operators */ 31 | console.log('num == 1 : ' + (num == 1)); 32 | console.log('num === 1 : ' + (num === 1)); 33 | console.log('num != 1 : ' + (num != 1)); 34 | console.log('num > 1 : ' + (num > 1)); 35 | console.log('num < 1 : ' + (num < 1)); 36 | console.log('num >= 1 : ' + (num >= 1)); 37 | console.log('num <= 1 : ' + (num <= 1)); 38 | 39 | /* Logical operators */ 40 | console.log('true && false : ' + (true && false)); // false 41 | console.log('true || false : ' + (true || false)); // true 42 | console.log('!true : ' + !true); // false 43 | 44 | /* Bitwise operators */ 45 | console.log('5 & 1:', 5 & 1); // same as 0101 & 0001 (result 0001 / 1) 46 | console.log('5 | 1:', 5 | 1); // same as 0101 | 0001 (result 0101 / 5) 47 | console.log('~ 5:', ~5); // same as ~0101 (result 1010 / 10) 48 | console.log('5 ^ 1:', 5 ^ 1); // same as 0101 ^ 0001 (result 0100 / 4) 49 | console.log('5 << 1:', 5 << 1); // same as 0101 << 1 (result 1010 / 10) 50 | console.log('5 >> 1:', 5 >> 1); // same as 0101 >> 1 (result 0010 / 2) 51 | 52 | /* typeOf */ 53 | console.log('typeof num:', typeof num); 54 | console.log('typeof Packt:', typeof 'Packt'); 55 | console.log('typeof true:', typeof true); 56 | console.log('typeof [1,2,3]:', typeof [1, 2, 3]); 57 | console.log('typeof {name:John}:', typeof { name: 'John' }); 58 | 59 | /* delete */ 60 | var myObj = { name: 'John', age: 21 }; 61 | delete myObj.age; 62 | console.log(myObj); // Object {name: "John"} -------------------------------------------------------------------------------- /01-JavaScript-UmaRapidaVisaoGeral/04-TruthyFalsy.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /01-JavaScript-UmaRapidaVisaoGeral/04-TruthyFalsy.js: -------------------------------------------------------------------------------- 1 | function testTruthy(val) { 2 | return val ? console.log('truthy') : console.log('falsy'); 3 | } 4 | 5 | testTruthy(true); // true 6 | testTruthy(false); // false 7 | testTruthy(new Boolean(false)); // true (object is always true) 8 | 9 | testTruthy(''); // false 10 | testTruthy('a'); // true 11 | testTruthy('Packt'); // true 12 | testTruthy(new String('')); // true (object is always true) 13 | 14 | testTruthy(1); // true 15 | testTruthy(-1); // true 16 | testTruthy(NaN); // false 17 | testTruthy(new Number(NaN)); // true (object is always true) 18 | 19 | testTruthy({}); // true (object is always true) 20 | 21 | var obj = { name: 'John' }; 22 | testTruthy(obj); // true 23 | testTruthy(obj.name); // true 24 | testTruthy(obj.age); // false (property age does not exist) -------------------------------------------------------------------------------- /01-JavaScript-UmaRapidaVisaoGeral/05-EqualsOperators.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /01-JavaScript-UmaRapidaVisaoGeral/05-EqualsOperators.js: -------------------------------------------------------------------------------- 1 | // Packt == true 2 | 3 | console.log('packt' ? true : false); 4 | // outputs true 5 | 6 | console.log('packt' == true); 7 | // 1 - converts Boolean using toNumber 8 | // 'packt' == 1 9 | // 2 - converts String using toNumber 10 | // NaN == 1 11 | // outputs false 12 | 13 | console.log('packt' == false); 14 | // 1 - converts Boolean using toNumber 15 | // 'packt' == 0 16 | // 2 - converts String using toNumber 17 | // NaN == 0 18 | // outputs false 19 | 20 | console.log([0] == true); 21 | // 1 - converts Boolean using toNumber 22 | // [0] == 1 23 | // 2 - converts Object using toPrimitive 24 | // 2.1 - [0].valueOf() is not primitive 25 | // 2.2 - [0].toString is 0 26 | // 0 == 1 27 | // outputs false 28 | 29 | //* ****************************** === 30 | console.log('packt' === true); // false 31 | 32 | console.log('packt' === 'packt'); // true 33 | 34 | var person1 = { name: 'John' }; 35 | var person2 = { name: 'John' }; 36 | console.log(person1 === person2); // false, different objects -------------------------------------------------------------------------------- /01-JavaScript-UmaRapidaVisaoGeral/README.md: -------------------------------------------------------------------------------- 1 | # 1. JavaScript - uma rápida visão geral 2 | 3 | Resumo do cap 01 4 | 5 | ## Índice 6 | 7 | 1. [Estrutura de dados e algoritmos em JavaScript](#parte1) 8 | 2. [Básico sobre o JavaScript](#parte2) 9 | 3. [Variáveis](#parte3) 10 | 4. [Operadores](#parte4) 11 | 5. [Truthy e falsy](#parte5) 12 | 6. [Funções dos operadores de igualdade (== e ===)](#parte6) 13 | 7. [Estruturas de controle](#parte7) 14 | 8. [Laços](#parte8) 15 | 9. [Funções](#parte9) 16 | 10. [Programação orientada a objetos em JavaScript](#parte10) 17 | 11. [Depuração e ferramentas](#parte11) 18 | 12. [Introdução à ECMAScript](#parte12) 19 | 13. [Funcionalidades da ECMAScript 6](#parte13) 20 | 14. [Funcionalidades da ECMAScript 7](#parte14) 21 | 15. [Resumo.](#parte15) 22 | --- 23 | 24 | 25 | ## 1 - Estrutura de dados e algoritmos em JavaScript 26 | 27 | 28 | 29 | [Voltar ao Índice](#indice) 30 | 31 | --- 32 | 33 | 34 | ## 2 - Básico sobre o JavaScript 35 | 36 | 37 | 38 | [Voltar ao Índice](#indice) 39 | 40 | --- 41 | 42 | 43 | ## 3 - Variáveis 44 | 45 | 46 | 47 | [Voltar ao Índice](#indice) 48 | 49 | --- 50 | 51 | 52 | ## 4 - Operadores 53 | 54 | 55 | 56 | [Voltar ao Índice](#indice) 57 | 58 | --- 59 | 60 | 61 | ## 5 - Truthy e falsy 62 | 63 | 64 | 65 | [Voltar ao Índice](#indice) 66 | 67 | --- 68 | 69 | 70 | ## 6 - Funções dos operadores de igualdade (== e ===) 71 | 72 | 73 | 74 | [Voltar ao Índice](#indice) 75 | 76 | --- 77 | 78 | 79 | ## 7 - Estruturas de controle 80 | 81 | 82 | 83 | [Voltar ao Índice](#indice) 84 | 85 | --- 86 | 87 | 88 | ## 8 - Laços 89 | 90 | 91 | 92 | [Voltar ao Índice](#indice) 93 | 94 | --- 95 | 96 | 97 | ## 9 - Funções 98 | 99 | 100 | 101 | [Voltar ao Índice](#indice) 102 | 103 | --- 104 | 105 | 106 | ## 10 - Programação orientada a objetos em JavaScript 107 | 108 | 109 | 110 | [Voltar ao Índice](#indice) 111 | 112 | --- 113 | 114 | 115 | ## 11 - Depuração e ferramentas 116 | 117 | 118 | 119 | [Voltar ao Índice](#indice) 120 | 121 | --- 122 | 123 | 124 | ## 12 - Introdução à ECMAScript 125 | 126 | 127 | 128 | [Voltar ao Índice](#indice) 129 | 130 | --- 131 | 132 | 133 | ## 13 - Funcionalidades da ECMAScript 6 134 | 135 | 136 | 137 | [Voltar ao Índice](#indice) 138 | 139 | --- 140 | 141 | 142 | ## 14 - Funcionalidades da ECMAScript 7 143 | 144 | 145 | 146 | [Voltar ao Índice](#indice) 147 | 148 | --- 149 | 150 | 151 | ## 15 - Resumo. 152 | 153 | 154 | 155 | [Voltar ao Índice](#indice) 156 | 157 | --- 158 | 159 | -------------------------------------------------------------------------------- /02-Arrays/README.md: -------------------------------------------------------------------------------- 1 | # 2. Arrays 2 | 3 | Resumo do Cap. 02 4 | 5 | ## Índice 6 | 7 | 1. [Por que devemos usar arrays?](#parte1) 8 | 2. [Criando e inicializando arrays](#parte2) 9 | 3. [Acessando elementos e iterando em um array](#parte3) 10 | 4. [Acrescentando elementos](#parte4) 11 | 5. [Usando o método push](#parte5) 12 | 6. [Inserindo um elemento na primeira posição](#parte6) 13 | 7. [Usando o método unshift](#parte7) 14 | 8. [Removendo elementos](#parte8) 15 | 9. [Removendo um elemento da primeira posição](#parte9) 16 | 10. [Usando o método shift](#parte10) 17 | 11. [Acrescentando e removendo elementos de uma posição específica](#parte11) 18 | 12. [Arrays bidimensionais e multidimensionais](#parte12) 19 | 13. [Iterando pelos elementos de arrays bidimensionais](#parte13) 20 | 14. [Arrays multidimensionais](#parte14) 21 | 15. [Referências para métodos de array em JavaScript](#parte15) 22 | 16. [Juntando vários arrays](#parte16) 23 | 17. [Funções de iteração](#parte17) 24 | 18. [Iterando com o método every](#parte18) 25 | 19. [Iterando com o método some](#parte19) 26 | 20. [Iterando com forEach](#parte20) 27 | 21. [Usando map e filter](#parte21) 28 | 22. [Usando o método reduce](#parte22) 29 | 23. [ECMAScript 6 e novas funcionalidades de Array](#parte23) 30 | 24. [Iterando com forEach e funções de seta](#parte24) 31 | 25. [Iterando com o laço for..of](#parte25) 32 | 26. [Usando o novo iterador da ES6 (@@iterator)](#parte26) 33 | 27. [Ordenando elementos](#parte27) 34 | 28. [Convertendo um array em uma string](#parte28) 35 | 29. [Classe TypedArray](#parte29) 36 | 30. [Resumo](#parte30) 37 | --- 38 | 39 | 40 | ## 1 - Por que devemos usar arrays? 41 | 42 | 43 | 44 | [Voltar ao Índice](#indice) 45 | 46 | --- 47 | 48 | 49 | ## 2 - Criando e inicializando arrays 50 | 51 | 52 | 53 | [Voltar ao Índice](#indice) 54 | 55 | --- 56 | 57 | 58 | ## 3 - Acessando elementos e iterando em um array 59 | 60 | 61 | 62 | [Voltar ao Índice](#indice) 63 | 64 | --- 65 | 66 | 67 | ## 4 - Acrescentando elementos 68 | 69 | 70 | 71 | [Voltar ao Índice](#indice) 72 | 73 | --- 74 | 75 | 76 | ## 5 - Usando o método push 77 | 78 | 79 | 80 | [Voltar ao Índice](#indice) 81 | 82 | --- 83 | 84 | 85 | ## 6 - Inserindo um elemento na primeira posição 86 | 87 | 88 | 89 | [Voltar ao Índice](#indice) 90 | 91 | --- 92 | 93 | 94 | ## 7 - Usando o método unshift 95 | 96 | 97 | 98 | [Voltar ao Índice](#indice) 99 | 100 | --- 101 | 102 | 103 | ## 8 - Removendo elementos 104 | 105 | 106 | 107 | [Voltar ao Índice](#indice) 108 | 109 | --- 110 | 111 | 112 | ## 9 - Removendo um elemento da primeira posição 113 | 114 | 115 | 116 | [Voltar ao Índice](#indice) 117 | 118 | --- 119 | 120 | 121 | ## 10 - Usando o método shift 122 | 123 | 124 | 125 | [Voltar ao Índice](#indice) 126 | 127 | --- 128 | 129 | 130 | ## 11 - Acrescentando e removendo elementos de uma posição específica 131 | 132 | 133 | 134 | [Voltar ao Índice](#indice) 135 | 136 | --- 137 | 138 | 139 | ## 12 - Arrays bidimensionais e multidimensionais 140 | 141 | 142 | 143 | [Voltar ao Índice](#indice) 144 | 145 | --- 146 | 147 | 148 | ## 13 - Iterando pelos elementos de arrays bidimensionais 149 | 150 | 151 | 152 | [Voltar ao Índice](#indice) 153 | 154 | --- 155 | 156 | 157 | ## 14 - Arrays multidimensionais 158 | 159 | 160 | 161 | [Voltar ao Índice](#indice) 162 | 163 | --- 164 | 165 | 166 | ## 15 - Referências para métodos de array em JavaScript 167 | 168 | 169 | 170 | [Voltar ao Índice](#indice) 171 | 172 | --- 173 | 174 | 175 | ## 16 - Juntando vários arrays 176 | 177 | 178 | 179 | [Voltar ao Índice](#indice) 180 | 181 | --- 182 | 183 | 184 | ## 17 - Funções de iteração 185 | 186 | 187 | 188 | [Voltar ao Índice](#indice) 189 | 190 | --- 191 | 192 | 193 | ## 18 - Iterando com o método every 194 | 195 | 196 | 197 | [Voltar ao Índice](#indice) 198 | 199 | --- 200 | 201 | 202 | ## 19 - Iterando com o método some 203 | 204 | 205 | 206 | [Voltar ao Índice](#indice) 207 | 208 | --- 209 | 210 | 211 | ## 20 - Iterando com forEach 212 | 213 | 214 | 215 | [Voltar ao Índice](#indice) 216 | 217 | --- 218 | 219 | 220 | ## 21 - Usando map e filter 221 | 222 | 223 | 224 | [Voltar ao Índice](#indice) 225 | 226 | --- 227 | 228 | 229 | ## 22 - Usando o método reduce 230 | 231 | 232 | 233 | [Voltar ao Índice](#indice) 234 | 235 | --- 236 | 237 | 238 | ## 23 - ECMAScript 6 e novas funcionalidades de Array 239 | 240 | 241 | 242 | [Voltar ao Índice](#indice) 243 | 244 | --- 245 | 246 | 247 | ## 24 - Iterando com forEach e funções de seta 248 | 249 | 250 | 251 | [Voltar ao Índice](#indice) 252 | 253 | --- 254 | 255 | 256 | ## 25 - Iterando com o laço for..of 257 | 258 | 259 | 260 | [Voltar ao Índice](#indice) 261 | 262 | --- 263 | 264 | 265 | ## 26 - Usando o novo iterador da ES6 (@@iterator) 266 | 267 | 268 | 269 | [Voltar ao Índice](#indice) 270 | 271 | --- 272 | 273 | 274 | ## 27 - Ordenando elementos 275 | 276 | 277 | 278 | [Voltar ao Índice](#indice) 279 | 280 | --- 281 | 282 | 283 | ## 28 - Convertendo um array em uma string 284 | 285 | 286 | 287 | [Voltar ao Índice](#indice) 288 | 289 | --- 290 | 291 | 292 | ## 29 - Classe TypedArray 293 | 294 | 295 | 296 | [Voltar ao Índice](#indice) 297 | 298 | --- 299 | 300 | 301 | ## 30 - Resumo 302 | 303 | 304 | 305 | [Voltar ao Índice](#indice) 306 | 307 | --- 308 | 309 | -------------------------------------------------------------------------------- /03-Pilhas/README.md: -------------------------------------------------------------------------------- 1 | # 3. Pilhas 2 | 3 | Resumo do Cap. 03 4 | 5 | ## Índice 6 | 7 | 1. [Estrutura de dados pilha](#parte1) 8 | 2. [Criando uma pilha](#parte2) 9 | 3. [Empilhando elementos na pilha](#parte3) 10 | 4. [Desempilhando elementos da pilha](#parte4) 11 | 5. [Dando uma espiada no elemento que está no topo da pilha](#parte5) 12 | 6. [Verificando se a pilha está vazia](#parte6) 13 | 7. [Limpando e exibindo os elementos da pilha](#parte7) 14 | 8. [Usando a classe Stack](#parte8) 15 | 9. [EcmaScript 6 e a classe Stack](#parte9) 16 | 10. [Declarando a classe Stack usando a sintaxe da ES6](#parte10) 17 | 11. [Classes ES6 com Symbols no escopo](#parte11) 18 | 12. [Classes ES6 com WeakMap](#parte12) 19 | 13. [Resolvendo problemas usando pilhas](#parte13) 20 | 14. [Decimal para binário](#parte14) 21 | 15. [Algoritmo conversor de base](#parte15) 22 | 16. [Resumo](#parte16) 23 | --- 24 | 25 | 26 | ## 1 - Estrutura de dados pilha 27 | 28 | 29 | 30 | [Voltar ao Índice](#indice) 31 | 32 | --- 33 | 34 | 35 | ## 2 - Criando uma pilha 36 | 37 | 38 | 39 | [Voltar ao Índice](#indice) 40 | 41 | --- 42 | 43 | 44 | ## 3 - Empilhando elementos na pilha 45 | 46 | 47 | 48 | [Voltar ao Índice](#indice) 49 | 50 | --- 51 | 52 | 53 | ## 4 - Desempilhando elementos da pilha 54 | 55 | 56 | 57 | [Voltar ao Índice](#indice) 58 | 59 | --- 60 | 61 | 62 | ## 5 - Dando uma espiada no elemento que está no topo da pilha 63 | 64 | 65 | 66 | [Voltar ao Índice](#indice) 67 | 68 | --- 69 | 70 | 71 | ## 6 - Verificando se a pilha está vazia 72 | 73 | 74 | 75 | [Voltar ao Índice](#indice) 76 | 77 | --- 78 | 79 | 80 | ## 7 - Limpando e exibindo os elementos da pilha 81 | 82 | 83 | 84 | [Voltar ao Índice](#indice) 85 | 86 | --- 87 | 88 | 89 | ## 8 - Usando a classe Stack 90 | 91 | 92 | 93 | [Voltar ao Índice](#indice) 94 | 95 | --- 96 | 97 | 98 | ## 9 - EcmaScript 6 e a classe Stack 99 | 100 | 101 | 102 | [Voltar ao Índice](#indice) 103 | 104 | --- 105 | 106 | 107 | ## 10 - Declarando a classe Stack usando a sintaxe da ES6 108 | 109 | 110 | 111 | [Voltar ao Índice](#indice) 112 | 113 | --- 114 | 115 | 116 | ## 11 - Classes ES6 com Symbols no escopo 117 | 118 | 119 | 120 | [Voltar ao Índice](#indice) 121 | 122 | --- 123 | 124 | 125 | ## 12 - Classes ES6 com WeakMap 126 | 127 | 128 | 129 | [Voltar ao Índice](#indice) 130 | 131 | --- 132 | 133 | 134 | ## 13 - Resolvendo problemas usando pilhas 135 | 136 | 137 | 138 | [Voltar ao Índice](#indice) 139 | 140 | --- 141 | 142 | 143 | ## 14 - Decimal para binário 144 | 145 | 146 | 147 | [Voltar ao Índice](#indice) 148 | 149 | --- 150 | 151 | 152 | ## 15 - Algoritmo conversor de base 153 | 154 | 155 | 156 | [Voltar ao Índice](#indice) 157 | 158 | --- 159 | 160 | 161 | ## 16 - Resumo 162 | 163 | 164 | 165 | [Voltar ao Índice](#indice) 166 | 167 | --- 168 | 169 | -------------------------------------------------------------------------------- /04-Filas/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josemalcher/Livro-JavaScript-EstruturaDadosAlgoritmoJavaScript/0a6f263a6197f361369e13592b4f289d08657020/04-Filas/README.md -------------------------------------------------------------------------------- /05-Listas-ligadas/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josemalcher/Livro-JavaScript-EstruturaDadosAlgoritmoJavaScript/0a6f263a6197f361369e13592b4f289d08657020/05-Listas-ligadas/README.md -------------------------------------------------------------------------------- /06-Conjuntos/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josemalcher/Livro-JavaScript-EstruturaDadosAlgoritmoJavaScript/0a6f263a6197f361369e13592b4f289d08657020/06-Conjuntos/README.md -------------------------------------------------------------------------------- /07-Dicionarios-e-hashes/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josemalcher/Livro-JavaScript-EstruturaDadosAlgoritmoJavaScript/0a6f263a6197f361369e13592b4f289d08657020/07-Dicionarios-e-hashes/README.md -------------------------------------------------------------------------------- /08-Arvores/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josemalcher/Livro-JavaScript-EstruturaDadosAlgoritmoJavaScript/0a6f263a6197f361369e13592b4f289d08657020/08-Arvores/README.md -------------------------------------------------------------------------------- /09-Grafos/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josemalcher/Livro-JavaScript-EstruturaDadosAlgoritmoJavaScript/0a6f263a6197f361369e13592b4f289d08657020/09-Grafos/README.md -------------------------------------------------------------------------------- /10-Algoritmos-de-ordenacao-e-busca/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josemalcher/Livro-JavaScript-EstruturaDadosAlgoritmoJavaScript/0a6f263a6197f361369e13592b4f289d08657020/10-Algoritmos-de-ordenacao-e-busca/README.md -------------------------------------------------------------------------------- /11-Padroes-de-algoritmos/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josemalcher/Livro-JavaScript-EstruturaDadosAlgoritmoJavaScript/0a6f263a6197f361369e13592b4f289d08657020/11-Padroes-de-algoritmos/README.md -------------------------------------------------------------------------------- /12-Complexidade-de-algoritmos/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josemalcher/Livro-JavaScript-EstruturaDadosAlgoritmoJavaScript/0a6f263a6197f361369e13592b4f289d08657020/12-Complexidade-de-algoritmos/README.md -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Javascript estrutura de dados e algoritmos 2 Ed. 3 | 4 | https://github.com/loiane/javascript-datastructures-algorithms/ 5 | 6 | Meu resumo e Código fonte do livro **_Javascript Estrutura de Dados e Algoritmos Ed. 2_**. 7 | 8 | [Repositorio Oficcial - Loiane G.](https://github.com/loiane/javascript-datastructures-algorithms/) original do livro 9 | 10 | ## Índice 11 | 12 | 1. [Capítulo 01 JavaScript – uma visão geral rápida](#parte1) 13 | 2. [Capítulo 02 Visão geral sobre ECMAScript e TypeScript](#parte2) 14 | 3. [Capítulo 03 Arrays](#parte3) 15 | 4. [Capítulo 04 Pilhas](#parte4) 16 | 5. [Capítulo 05 Filas e deques](#parte5) 17 | 6. [Capítulo 06 Listas ligadas](#parte6) 18 | 7. [Capítulo 07 Conjuntos](#parte7) 19 | 8. [Capítulo 08 Dicionários e hashes](#parte8) 20 | 9. [Capítulo 09 Recursão](#parte9) 21 | 10. [Capítulo 10 Árvores](#parte10) 22 | 11. [Capítulo 11 Heap binário e heap sort](#parte11) 23 | 12. [Capítulo 12 Grafos](#parte12) 24 | 13. [Capítulo 13 Algoritmos de ordenação e de busca](#parte13) 25 | 14. [Capítulo 14 Designs de algoritmos e técnicas](#parte14) 26 | 15. [Capítulo 15 Complexidade de algoritmos](#parte15) 27 | --- 28 | 29 | 30 | ## 1 - Capítulo 01 JavaScript – uma visão geral rápida 31 | 32 | ### - Estrutura de dados e algoritmos em JavaScript 33 | ### - Configurando o ambiente 34 | ### - Configuração mínima para trabalhar com JavaScript 35 | ### - Usando servidores web 36 | ### - http-server do Node.js 37 | ### - Básico sobre o JavaScript 38 | 39 | ```html 40 | 41 | 42 | 43 | 44 | 01 45 | 46 | 47 | 48 | 52 | 53 | 54 | ``` 55 | 56 | ```js 57 | function output(t) { 58 | document.write('

' + t + '

'); 59 | } 60 | 61 | alert('Hello, World!'); 62 | console.log('Hello, World!'); 63 | output('Hello, World!'); 64 | ``` 65 | 66 | ### - Variáveis 67 | 68 | ```html 69 | 70 | 71 | 72 | 73 | 02 74 | 75 | 76 | 77 | 78 | 79 | ``` 80 | 81 | ### - Escopo das variáveis 82 | 83 | ```js 84 | var num = 1; // {1} 85 | num = 3; // {2} 86 | 87 | var price = 1.5; // {3} 88 | var myName = 'Packt'; // {4} 89 | var trueValue = true; // {5} 90 | var nullVar = null; // {6} 91 | var und; // {7} 92 | 93 | console.log('num: ' + num); 94 | console.log('myName: ' + myName); 95 | console.log('trueValue: ' + trueValue); 96 | console.log('price: ' + price); 97 | console.log('nullVar: ' + nullVar); 98 | console.log('und: ' + und); 99 | 100 | // ******* Variable Scope 101 | 102 | var myVariable = 'global'; 103 | myOtherVariable = 'global'; 104 | 105 | function myFunction() { 106 | var myVariable = 'local'; 107 | return myVariable; 108 | } 109 | 110 | function myOtherFunction() { 111 | myOtherVariable = 'local'; 112 | return myOtherVariable; 113 | } 114 | 115 | console.log(myVariable); //{1} 116 | console.log(myFunction()); //{2} 117 | 118 | console.log(myOtherVariable); //{3} 119 | console.log(myOtherFunction()); //{4} 120 | console.log(myOtherVariable); //{5} 121 | ``` 122 | 123 | ### - Operadores 124 | 125 | ```js 126 | /* Arithmetic operators */ 127 | var num = 0; // {1} 128 | console.log('num value is ' + num); 129 | 130 | num = num + 2; 131 | console.log('New num value is ' + num); 132 | 133 | num = num * 3; 134 | console.log('New num value is ' + num); 135 | 136 | num = num / 2; 137 | console.log('New num value is ' + num); 138 | 139 | num++; 140 | num--; 141 | 142 | console.log('New num value is ' + num); 143 | 144 | console.log('num mod 2 value is ' + num % 2); 145 | 146 | /* Assignment operators */ 147 | num += 1; 148 | num -= 2; 149 | num *= 3; 150 | num /= 2; 151 | num %= 3; 152 | 153 | console.log('New num value is ' + num); 154 | 155 | /* Assignment operators */ 156 | console.log('num == 1 : ' + (num == 1)); 157 | console.log('num === 1 : ' + (num === 1)); 158 | console.log('num != 1 : ' + (num != 1)); 159 | console.log('num > 1 : ' + (num > 1)); 160 | console.log('num < 1 : ' + (num < 1)); 161 | console.log('num >= 1 : ' + (num >= 1)); 162 | console.log('num <= 1 : ' + (num <= 1)); 163 | 164 | /* Logical operators */ 165 | console.log('true && false : ' + (true && false)); // false 166 | console.log('true || false : ' + (true || false)); // true 167 | console.log('!true : ' + !true); // false 168 | 169 | /* Bitwise operators */ 170 | console.log('5 & 1:', 5 & 1); // same as 0101 & 0001 (result 0001 / 1) 171 | console.log('5 | 1:', 5 | 1); // same as 0101 | 0001 (result 0101 / 5) 172 | console.log('~ 5:', ~5); // same as ~0101 (result 1010 / 10) 173 | console.log('5 ^ 1:', 5 ^ 1); // same as 0101 ^ 0001 (result 0100 / 4) 174 | console.log('5 << 1:', 5 << 1); // same as 0101 << 1 (result 1010 / 10) 175 | console.log('5 >> 1:', 5 >> 1); // same as 0101 >> 1 (result 0010 / 2) 176 | 177 | /* typeOf */ 178 | console.log('typeof num:', typeof num); 179 | console.log('typeof Packt:', typeof 'Packt'); 180 | console.log('typeof true:', typeof true); 181 | console.log('typeof [1,2,3]:', typeof [1, 2, 3]); 182 | console.log('typeof {name:John}:', typeof { name: 'John' }); 183 | 184 | /* delete */ 185 | var myObj = { name: 'John', age: 21 }; 186 | delete myObj.age; 187 | console.log(myObj); // Object {name: "John"} 188 | ``` 189 | 190 | ### - Verdadeiro e falso 191 | 192 | ```js 193 | function testTruthy(val) { 194 | return val ? console.log('truthy') : console.log('falsy'); 195 | } 196 | 197 | testTruthy(true); // true 198 | testTruthy(false); // false 199 | testTruthy(new Boolean(false)); // true (object is always true) 200 | 201 | testTruthy(''); // false 202 | testTruthy('a'); // true 203 | testTruthy('Packt'); // true 204 | testTruthy(new String('')); // true (object is always true) 205 | 206 | testTruthy(1); // true 207 | testTruthy(-1); // true 208 | testTruthy(NaN); // false 209 | testTruthy(new Number(NaN)); // true (object is always true) 210 | 211 | testTruthy({}); // true (object is always true) 212 | 213 | var obj = { name: 'John' }; 214 | testTruthy(obj); // true 215 | testTruthy(obj.name); // true 216 | testTruthy(obj.age); // false (property age does not exist) 217 | ``` 218 | 219 | ### - Funções dos operadores de igualdade (== e ===) 220 | 221 | ```js 222 | // Packt == true 223 | 224 | console.log('packt' ? true : false); 225 | // outputs true 226 | 227 | console.log('packt' == true); 228 | // 1 - converts Boolean using toNumber 229 | // 'packt' == 1 230 | // 2 - converts String using toNumber 231 | // NaN == 1 232 | // outputs false 233 | 234 | console.log('packt' == false); 235 | // 1 - converts Boolean using toNumber 236 | // 'packt' == 0 237 | // 2 - converts String using toNumber 238 | // NaN == 0 239 | // outputs false 240 | 241 | console.log([0] == true); 242 | // 1 - converts Boolean using toNumber 243 | // [0] == 1 244 | // 2 - converts Object using toPrimitive 245 | // 2.1 - [0].valueOf() is not primitive 246 | // 2.2 - [0].toString is 0 247 | // 0 == 1 248 | // outputs false 249 | 250 | //* ****************************** === 251 | console.log('packt' === true); // false 252 | 253 | console.log('packt' === 'packt'); // true 254 | 255 | var person1 = { name: 'John' }; 256 | var person2 = { name: 'John' }; 257 | console.log(person1 === person2); // false, different objects 258 | ``` 259 | 260 | ### - Estruturas de controle 261 | ### - Instruções condicionais 262 | ### - Laços 263 | ### - Funções 264 | ### - Programação orientada a objetos em Javascript 265 | ### - Depuração e ferramentas 266 | ### - Depuração com o VSCode 267 | ### - Resumo 268 | 269 | [Voltar ao Índice](#indice) 270 | 271 | --- 272 | 273 | 274 | ## 2 - Capítulo 02 Visão geral sobre ECMAScript e TypeScript 275 | 276 | ### - ECMAScript ou JavaScript? 277 | ### - ES6, ES2015, ES7, ES2016, ES8, ES2017 e ES.Next 278 | ### - Tabela de compatibilidade 279 | ### - Usando o Babel.js 280 | ### - Funcionalidades das versões ECMAScript 2015+ 281 | ### - let e const no lugar de var 282 | ### - Escopo de variáveis com let e const 283 | ### - Templates literais 284 | ### - Funções de seta 285 | ### - Valores default para parâmetros de funções 286 | ### - Declarando os operadores de espalhamento e rest 287 | ### - Propriedades melhoradas de objetos 288 | ### - Programação orientada a objetos com classes 289 | ### - Herança 290 | ### - Trabalhando com getters e setters 291 | ### - Operador de exponencial 292 | ### - Módulos 293 | ### - Executando módulos ES2015 no navegador e com o Node.js 294 | ### - Usando importações nativas da ES2015 no Node.js 295 | ### - Executando módulos ES2015 no navegador 296 | ### - Compatibilidade de versões anteriores a ES2015+ 297 | ### - Introdução ao TypeScript 298 | ### - Inferência de tipo 299 | ### - Interfaces 300 | ### - Genéricos 301 | ### - Outras funcionalidades do TypeScript 302 | ### - Verificações do TypeScript em tempo de compilação em arquivos JavaScript 303 | ### - Resumo 304 | 305 | [Voltar ao Índice](#indice) 306 | 307 | --- 308 | 309 | 310 | ## 3 - Capítulo 03 Arrays 311 | 312 | ### - Por que devemos usar arrays? 313 | ### - Criando e inicializando arrays 314 | ### - Acessando elementos e fazendo uma iteração em um array 315 | ### - Acrescentando elementos 316 | ### - Inserindo um elemento no final do array 317 | ### - Usando o método push 318 | ### - Inserindo um elemento na primeira posição 319 | ### - Usando o método unshift 320 | ### - Removendo elementos 321 | ### - Removendo um elemento do final do array 322 | ### - Removendo um elemento da primeira posição 323 | ### - Usando o método shift 324 | ### - Adicionando e removendo elementos de uma posição específica 325 | ### - Arrays bidimensionais e multidimensionais 326 | ### - Iterando pelos elementos de arrays bidimensionais 327 | ### - Arrays multidimensionais 328 | ### - Referências para métodos de array em JavaScript 329 | ### - Juntando vários arrays 330 | ### - Funções de iteração 331 | ### - Iterando com o método every 332 | ### - Iterando com o método some 333 | ### - Iterando com forEach 334 | ### - Usando map e filter 335 | ### - Usando o método reduce 336 | ### - ECMAScript 6 e as novas funcionalidades de array 337 | ### - Iterando com o laço for…of 338 | ### - Usando o objeto @@iterator 339 | ### - Métodos entries, keys e values de array 340 | ### - Usando o método from 341 | ### - Usando o método Array.of 342 | ### - Usando o método fill 343 | ### - Usando o método copyWithin 344 | ### - Ordenando elementos 345 | ### - Ordenação personalizada 346 | ### - Ordenando strings 347 | ### - Pesquisa 348 | ### - ECMAScript 2015 – os métodos find e findIndex 349 | ### - ECMAScript 2016 – usando o método includes 350 | ### - Convertendo um array em uma string 351 | ### - Classe TypedArray 352 | ### - Arrays em TypeScript 353 | ### - Resumo 354 | 355 | [Voltar ao Índice](#indice) 356 | 357 | --- 358 | 359 | 360 | ## 4 - Capítulo 04 Pilhas 361 | 362 | ### - Criação de uma biblioteca de estruturas de dados e algoritmos JavaScript 363 | ### - Estrutura de dados de pilha 364 | ### - Criando uma classe Stack baseada em array 365 | ### - Push de elementos na pilha 366 | ### - Pop de elementos da pilha 367 | ### - Dando uma espiada no elemento que está no topo da pilha 368 | ### - Verificando se a pilha está vazia 369 | ### - Limpando os elementos da pilha 370 | ### - Usando a classe Stack 371 | ### - Criando uma classe JavaScript Stack baseada em objeto 372 | ### - Push de elementos na pilha 373 | ### - Verificando se a pilha está vazia e o seu tamanho 374 | ### - Pop de elementos da pilha 375 | ### - Dando uma espiada no topo e limpando a pilha 376 | ### - Criando o método toString 377 | ### - Protegendo os elementos internos da estrutura de dados 378 | ### - Convenção de nomenclatura com underscore 379 | ### - Classes ES2015 com símbolos no escopo 380 | ### - Classes ES2015 com WeakMap 381 | ### - Proposta para campos de classe na ECMAScript 382 | ### - Resolvendo problemas usando pilhas 383 | ### - Convertendo números decimais para binários 384 | ### - Algoritmo conversor de base 385 | ### - Resumo 386 | 387 | [Voltar ao Índice](#indice) 388 | 389 | --- 390 | 391 | 392 | ## 5 - Capítulo 05 Filas e deques 393 | 394 | ### - Estrutura de dados de fila 395 | ### - Criando a classe Queue 396 | ### - Inserção de elementos na fila 397 | ### - Remoção de elementos da fila 398 | ### - Dando uma espiada no elemento que está na frente da fila 399 | ### - Verificando se a pilha está vazia e o seu tamanho 400 | ### - Limpando a fila 401 | ### - Criando o método toString 402 | ### - Usando a classe Queue 403 | ### - Estrutura de dados de deque 404 | ### - Criando a classe Deque 405 | ### - Adicionando elementos na frente do deque 406 | ### - Usando a classe Deque 407 | ### - Resolvendo problemas usando filas e deques 408 | ### - Fila circular – Batata Quente 409 | ### - Verificador de palíndromo 410 | ### - Filas de tarefas em JavaScript 411 | ### - Resumo 412 | 413 | [Voltar ao Índice](#indice) 414 | 415 | --- 416 | 417 | 418 | ## 6 - Capítulo 06 Listas ligadas 419 | 420 | ### - Estrutura de dados da lista ligada 421 | ### - Criando a classe LinkedList 422 | ### - Inserindo elementos no final da lista ligada 423 | ### - Removendo elementos de uma posição específica da lista ligada 424 | ### - Percorrendo a lista com um laço até alcançar a posição desejada 425 | ### - Refatorando o método remove 426 | ### - Inserindo um elemento em qualquer posição 427 | ### - Método indexOf: devolvendo a posição de um elemento 428 | ### - Removendo um elemento da lista ligada 429 | ### - Métodos isEmpty, size e getHead 430 | ### - Método toString 431 | ### - Listas duplamente ligadas 432 | ### - Inserindo um novo elemento em qualquer posição 433 | ### - Removendo elementos de qualquer posição 434 | ### - Listas ligadas circulares 435 | ### - Inserindo um novo elemento em qualquer posição 436 | ### - Removendo elementos de qualquer posição 437 | ### - Listas ligadas ordenadas 438 | ### - Inserindo elementos na ordem 439 | ### - Criando a classe StackLinkedList 440 | ### - Resumo 441 | 442 | [Voltar ao Índice](#indice) 443 | 444 | --- 445 | 446 | 447 | ## 7 - Capítulo 07 Conjuntos 448 | 449 | ### - Estruturando um conjunto de dados 450 | ### - Criando uma classe Set 451 | ### - Método has(element) 452 | ### - Método add 453 | ### - Métodos delete e clear 454 | ### - Método size 455 | ### - Método values 456 | ### - Usando a classe Set 457 | ### - Operações em conjuntos 458 | ### - União de conjuntos 459 | ### - Intersecção de conjuntos 460 | ### - Aperfeiçoando o método intersection 461 | ### - Diferença entre conjuntos 462 | ### - Subconjunto 463 | ### - ECMAScript 2015 – a classe Set 464 | ### - Operações com a classe Set da ES2015 465 | ### - Simulando a operação de união 466 | ### - Simulando a operação de intersecção 467 | ### - Simulando a operação de diferença 468 | ### - Usando o operador de espalhamento 469 | ### - Multiconjuntos ou bags 470 | ### - Resumo 471 | 472 | [Voltar ao Índice](#indice) 473 | 474 | --- 475 | 476 | 477 | ## 8 - Capítulo 08 Dicionários e hashes 478 | 479 | ### - Estrutura de dados de dicionário 480 | ### - Criando a classe Dictionary 481 | ### - Verificando se uma chave está presente no dicionário 482 | ### - Definindo uma chave e um valor no dicionário, e a classe ValuePair 483 | ### - Removendo um valor do dicionário 484 | ### - Obtendo um valor do dicionário 485 | ### - Métodos keys, values e valuePairs 486 | ### - Iterando pelos ValuePairs do dicionário com forEach 487 | ### - Métodos clear, size, isEmpty e toString 488 | ### - Usando a classe Dictionary 489 | ### - Tabela hash 490 | ### - Criando uma classe HashTable 491 | ### - Criando uma função de hash 492 | ### - Inserindo uma chave e um valor na tabela hash 493 | ### - Obtendo um valor da tabela hash 494 | ### - Removendo um valor da tabela hash 495 | ### - Usando a classe HashTable 496 | ### - Tabela hash versus conjunto hash 497 | ### - Tratando colisões nas tabelas hash 498 | ### - Encadeamento separado 499 | ### - Método put 500 | ### - Método get 501 | ### - Método remove 502 | ### - Sondagem linear 503 | ### - Método put 504 | ### - Método get 505 | ### - Método remove 506 | ### - Criando funções melhores de hash 507 | ### - Classe Map da ES2015 508 | ### - Classes WeakMap e WeakSet da ES2015 509 | ### - Resumo 510 | 511 | [Voltar ao Índice](#indice) 512 | 513 | --- 514 | 515 | 516 | ## 9 - Capítulo 09 Recursão 517 | 518 | ### - Entendendo a recursão 519 | ### - Calculando o fatorial de um número 520 | ### - Fatorial iterativo 521 | ### - Fatorial recursivo 522 | ### - Pilha de chamadas 523 | ### - Limitação do tamanho da pilha de chamadas em JavaScript 524 | ### - Sequência de Fibonacci 525 | ### - Fibonacci iterativo 526 | ### - Fibonacci recursivo 527 | ### - Fibonacci com memoização 528 | ### - Por que usar recursão? É mais rápido? 529 | ### - Resumo 530 | 531 | [Voltar ao Índice](#indice) 532 | 533 | --- 534 | 535 | 536 | ## 10 - Capítulo 10 Árvores 537 | 538 | ### - Estrutura de dados de árvore 539 | ### - Terminologia de árvores 540 | ### - Árvore binária e árvore binária de busca 541 | ### - Criando as classes Node e BinarySearchTree 542 | ### - Inserindo uma chave na BST 543 | ### - Percorrendo uma árvore 544 | ### - Percurso em-ordem 545 | ### - Percurso pré-ordem 546 | ### - Percurso pós-ordem 547 | ### - Pesquisando valores em uma árvore 548 | ### - Pesquisando valores mínimos e máximos 549 | ### - Pesquisando um valor específico 550 | ### - Removendo um nó 551 | ### - Removendo uma folha 552 | ### - Removendo um nó com um filho à esquerda ou à direita 553 | ### - Removendo um nó com dois filhos 554 | ### - Árvores autobalanceadas 555 | ### - Árvore de Adelson-Velskii e Landi (árvore AVL) 556 | ### - Altura de um nó e o fator de balanceamento 557 | ### - Operações de balanceamento – rotações na árvore AVL 558 | ### - Rotação Esquerda-Esquerda: rotação simples à direita 559 | ### - Rotação Direita-Direita: rotação simples à esquerda 560 | ### - Esquerda-Direita: rotação dupla à direita 561 | ### - Direita-Esquerda: rotação dupla à esquerda 562 | ### - Inserindo um nó na árvore AVL 563 | ### - Removendo um nó da árvore AVL 564 | ### - Árvore rubro-negra 565 | ### - Inserindo um nó na árvore rubro-negra 566 | ### - Verificando as propriedades da árvore rubro-negra após a inserção 567 | ### - Rotações na árvore rubro-negra 568 | ### - Resumo 569 | 570 | [Voltar ao Índice](#indice) 571 | 572 | --- 573 | 574 | 575 | ## 11 - Capítulo 11 Heap binário e heap sort 576 | 577 | ### - Estrutura de dados do heap binário 578 | ### - Criando a classe MinHeap 579 | ### - Representação da árvore binária com um array 580 | ### - Inserindo um valor no heap 581 | ### - Operação de sift up 582 | ### - Encontrando os valores mínimo e máximo no heap 583 | ### - Extraindo os valores mínimo e máximo do heap 584 | ### - Operação de sift down 585 | ### - Criando a classe MaxHeap 586 | ### - Algoritmo de heap sort 587 | ### - Resumo 588 | 589 | [Voltar ao Índice](#indice) 590 | 591 | --- 592 | 593 | 594 | ## 12 - Capítulo 12 Grafos 595 | 596 | ### - Terminologia dos grafos 597 | ### - Grafos direcionados e não direcionados 598 | ### - Representando um grafo 599 | ### - A matriz de adjacências 600 | ### - Lista de adjacências 601 | ### - Matriz de incidências 602 | ### - Criando a classe Graph 603 | ### - Percorrendo grafos 604 | ### - Busca em largura (BFS) 605 | ### - Encontrando os caminhos mais curtos usando BFS 606 | ### - Estudos adicionais sobre algoritmos de caminhos mais curtos 607 | ### - Busca em profundidade (DFS) 608 | ### - Explorando o algoritmo DFS 609 | ### - Ordenação topológica usando DFS 610 | ### - Algoritmos de caminho mais curto 611 | ### - Algoritmo de Dijkstra 612 | ### - Algoritmo de Floyd-Warshall 613 | ### - Árvore de extensão mínima (MST) 614 | ### - Algoritmo de Prim 615 | ### - Algoritmo de Kruskal 616 | ### - Resumo 617 | 618 | [Voltar ao Índice](#indice) 619 | 620 | --- 621 | 622 | 623 | ## 13 - Capítulo 13 Algoritmos de ordenação e de busca 624 | 625 | ### - Algoritmos de ordenação 626 | ### - Bubble sort 627 | ### - Bubble sort melhorado 628 | ### - Selection sort 629 | ### - Insertion sort 630 | ### - Merge sort 631 | ### - Quick sort 632 | ### - Processo de partição 633 | ### - Quick sort em ação 634 | ### - Counting sort 635 | ### - Bucket sort 636 | ### - Radix sort 637 | ### - Algoritmos de busca 638 | ### - Busca sequencial 639 | ### - Busca binária 640 | ### - Busca por interpolação 641 | ### - Algoritmos de embaralhamento 642 | ### - Algoritmo de embaralhamento de Fisher-Yates 643 | ### - Resumo 644 | 645 | [Voltar ao Índice](#indice) 646 | 647 | --- 648 | 649 | 650 | ## 14 - Capítulo 14 Designs de algoritmos e técnicas 651 | 652 | ### - Dividir e conquistar 653 | ### - Busca binária 654 | ### - Programação dinâmica 655 | ### - Problema do número mínimo de moedas para troco 656 | ### - Problema da mochila 657 | ### - Maior subsequência comum 658 | ### - Multiplicação de cadeia de matrizes 659 | ### - Algoritmos gulosos 660 | ### - Problema do número mínimo de moedas para troco 661 | ### - Problema fracionário da mochila 662 | ### - Algoritmos de backtracking 663 | ### - Rato em um labirinto 664 | ### - Solucionador de sudoku 665 | ### - Introdução à programação funcional 666 | ### - Programação funcional versus programação imperativa 667 | ### - ES2015+ e a programação funcional 668 | ### - Caixa de ferramentas funcional de JavaScript – map, filter e reduce 669 | ### - Bibliotecas e estruturas de dados funcionais de JavaScript 670 | ### - Resumo 671 | 672 | [Voltar ao Índice](#indice) 673 | 674 | --- 675 | 676 | 677 | ## 15 - Capítulo 15 Complexidade de algoritmos 678 | 679 | ### - Notação big-O 680 | ### - Compreendendo a notação big-O 681 | ### - O(1) 682 | ### - O(n) 683 | ### - O(n2) 684 | ### - Comparando as complexidades 685 | ### - Estruturas de dados 686 | ### - Grafos 687 | ### - Algoritmos de ordenação 688 | ### - Algoritmos de busca 689 | ### - Introdução à teoria de NP-completo 690 | ### - Problemas impossíveis e algoritmos heurísticos 691 | ### - Divertindo-se com algoritmos 692 | ### - Resumo 693 | 694 | 695 | [Voltar ao Índice](#indice) 696 | 697 | --- 698 | 699 | --------------------------------------------------------------------------------